python网络爬虫方向的第三方库_Python网络爬虫中常用第三方库总结

python对于爬虫的编写已经是相当的友好了,不过除了利用requests库或者scrapy框架之外,有一些库还需要我们知道,以便于我们更熟练、便捷的完成目标数据的爬取,接下来我就总结一下我认为在爬虫中常用的几个库。

一、re

re库是正则表达式库,是regex的缩写,用于从网页源码或者数据文件中提取我们所需的数据,具体使用方法如下:

①闯进过滤字符串的规定,一般用变量regex存储;

②将规则编译:pattern = re.compile(regex)

③使用规则进行查找:content = re.findall(pattern, html)

对于re库来说,最难的便是编写出相应的过滤规则,曾看到过这样一句话:如果一个问题你用了正则,那么就变成了两个问题。  接触过正则的也都知道它确实存在一定的难度性,下面是我对常用的符号用法的总结:

‘*’:匹配前面的子表达式零次或无数次;‘+’:匹配前面的子表达式一次或无数次;

‘.’:匹配除换行符\n以外的任何单字符;‘?‘:匹配前面的子表达式零次或一次;

’^':匹配输入字符串开始位置;‘$’:匹配输入字符串的结尾位置

‘\w':匹配字母、数字、下划线;’\d‘:匹配数字;

’\s':匹配空格;反义:将前面的字母改为大写,即指原义的反义;

‘{n}’:重复n次;‘{n,m}’:重复n到m次;

‘{n, }':重复n次或更多次;’?<=exp‘:匹配exp后的信息;如 How are you:(?(?<=How).+)

‘(?=exp)’:匹配exp前面的位置,如 How are you doing:(?.+(?=ing)) 这里取ing前所有字符,并定义txt为捕获分组名。

二、json

json是本身是一种存储格式,与python中的字典比较类似。因为我们在爬取时可能直接爬取到json格式数据,或者为方便后面的  使用需要将爬取数据转为json数据。因此学会运用json库,可以更加方便地提取我们所需数据。json中常用操作有:

①dumps:将python对象编码成json字符串。

其中一个参数为ensure_ascii,默认为True,若出现non-ascii字符,则出现\uxxxx,设为False即可。

②loads:用于解码json数据,返回python字段数据类型。

③encode:在转json文件时将文件编码转为utf-8

④decode:用于转为python类型时文件的解码。

三、xpath

同样是数据解析包,得到网页响应后传入xpath表达式,结果返回表达式所对应所有节点列表,如scrapy中:response.xpath()。

extract():在提取节点中特定数据时后面要加,序列化该节点为unicode字符串并返回列表,后面可跟encode转码。如:

item['workType'] = data.xpath('./td[2]/text()').extract()[0]xpath提取例子:

①/html/head/title/text():选择下

下元素的文字。

②//td:选择所有

元素,用 | 实现或操作,用 and 实现且操作。

③//div[@class='mine']:选择所有具有class='mine'属性的div元素,返回节点列表。

注:若要提取链接,定位到标签内部吼,后面加上 /@href 即可获取到标签内的链接。

四、threading

该库是Python中实现多线程加速的第三方库,具体用法如下:

①创建待加速函数,如爬取函数spider(url)。

②对每个url创建多线程:threading.Thread(target=spider, args=(u,));

注意:在Thread中的参数分别是待加速函数和待加速函数的参数,这两个是分开写的!!

③随后使用.start()开始加速,将所创多线程加入到所建threadlist中。

④最后使用 .join() 即可,遍历threadlist,完成加速

五、multiprocessing

multiprocessing一般用来实现多进程加速,使用方法类似于threading,具体如下:

①一般使用from multiprocessing import Process 导入多进程加速方法。

②创建待加速函数,如爬取函数spider(url)。

③对每个url创建多进程:p = Process(target=spider, args=(u,));

注意:在Process中的参数与上述多线程加速一样,也将函数与所传参数分开写!!

④最后使用 p.start() 即可。

六、pymysql

pymysql提供了python与mysql数据库相连的接口,即利用该库可以实现python与mysql数据库的连接,具体操作如下:

①创建连接:conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='对应名', charset='utf-8')

②创建游标:cursor = conn.cursor()

③执行sql语句,并返回受影响行数:effect_row = cursor.execute("select * from table")

④提交:conn.commit()

⑤关闭游标与连接:cursor.close(); conn.close()

七、mechanize

利用mechanize,可以实现对浏览器行为更好的模拟,常用有以下模拟方法:

①Browser():创建(打开)浏览器。

②open():打开网页。

③links():获取网页中所有链接;可以遍历 links() 方法,其下还有 .base_url 与 .url 属性。

④forms():获取所有表单。

⑤form[‘form_name’]:填写名为form_name表单中的信息。

⑥submit():提交表单。

⑦response().read():查看提交表单后的结果。

⑧addheaders变量:存放用于欺骗服务器的表头。

mechanize中包含了许多模拟浏览器设置,如处理机器人协议等,具体使用时,具体查询即可,常用的一系列设置如下:

#options

br.set_handle_equiv(True)

#br.set_handle_gzip(True)

br.set_handle_redirect(True)

br.set_handle_referer(True)

br.set_handle_robots(False)

#Follows refresh 0 but not hangs on refresh > 0

br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

br.set_debug_http(True)

br.set_debug_redirects(True)

br.set_debug_responses(True)

八、readability

readability是专门用于网页正文内容提取的第三方库,平时用的不多,但是可以轻松实现提取:

①导入:from readability.readability import Document

②使用:

正文:readable_article = Document(urllib.urlopen(url).read()).summary()

题目:readable_title = Document(urllib.urlopen(url).read()).short_title()

以上八个库便是在完成爬虫时常需借助的第三方库,愿能够为大家带来帮助。

你可能感兴趣的:(python网络爬虫方向的第三方库_Python网络爬虫中常用第三方库总结)