在爬虫中使用正则表达式是很麻烦的过程,在实际应用中有一个python特有的第三方库
bs4来替代正则表达式的用法,首先使用 pip install bs4 下载并同样方法下载lxml插件(后续介绍)
Bs4 的使用是需要将一个对象实例化的库,(两种方式)
1.
Fp = open(“./filename”,’r’,encording=’utf-8’)
Soup = Beautifulsoup(fp,’lxml’) #第二个参数固定
Soup = Beatifulsoup(response,‘lxml’)
第一个为请求回应
Soup 是一个全网页的源代码
Soup.a是第一个源代码中带有表示
多层级表示时使用空格表示 ul a 表示 ul > li>a
3.获取标签之间的文本数据:
Soup.select().text或者soup.select().string或者.get_text()均可获取
区别在于text和get_text可以获取一个标签中的所有文本内容
String只可以获取该标签直系存储的文本内容
4.获取标签中的属性值
Soup.a[‘标签名称’]
便捷高效常用
1.同样xpath也需要实例化(etree),同样是页面源码数据
2.结合对象方法进行标签捕获
实例化对象
法1.
Etree.parse(filepath)用于输入本地对象
将网络上的获取的源码数据加载到对象中
Xpath()
内容写由/组成的层级表达式,类比路径
//表示跳过中间层级 类似bs4中的空格 //div表示跳过前面所有返回div标签
返回element类型对象的列表
Xpath(‘//便签名[@定位属性名称=‘属性值’]【索引值】’)如果想要获取的标签内容用索引查找,但这里的索引值不是从0 开始
标签定位后在表达式追加/text()
/text获取的是标签中直系的文本内容
//text是标签中非直系内容,即所有文本内容
在表达式后直接加/@属性名称
在处理过程中有时会遇到页面编码解译与编译器不同主要原因是因为编译器为utf-8形式
那么需要在获取相应信息是把信息更改成utf-8
Respose.encoding=’utf-8’
如果这种方式仍然不能解决问题,可以单独对出现乱码的类型进行更改
格式为
new=*.encode(‘iso-8859-1’).decode(‘gbk)
创建文件
Import os
If not os.path.exits(‘’):
Os.makedirs(“”)
如果因特殊情形,以上两种解决乱码问题均不可以解决问题使用如下链接中方法
https://www.cnblogs.com/liuq/p/9849960.html
最后:
如果遇到网页访问503 意思是网页访问过载,多半原因是爬虫访问网页过于频繁导致,我的最初解决方法是使用time.sleep睡眠90秒,后来因为某些原因将时间调到10秒仍可解决,具体时间最优解法望实践研究。