python⽹络爬⾍⽅向的第三⽅库_Python⽹络爬⾍中常⽤第三
⽅库总结
python对于爬⾍的编写已经是相当的友好了,不过除了利⽤requests库或者scrapy框架之外,有⼀些库还需要我们知道,以便于我们更熟练、便捷的完成⽬标数据的爬取,接下来我就总结⼀下我认为在爬⾍中常⽤的⼏个库。
⼀、re
re库是正则表达式库,是regex的缩写,⽤于从⽹页源码或者数据⽂件中提取我们所需的数据,具体使⽤⽅法如下:
①闯进过滤字符串的规定,⼀般⽤变量regex存储;
②将规则编译:pattern = repile(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中常⽤操作有:
php是谁发明的①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)。python解析json文件
毕设做小程序要后端吗③对每个url创建多进程:p = Process(target=spider, args=(u,));
注意:在Process中的参数与上述多线程加速⼀样,也将函数与所传参数分开写!!
④最后使⽤ p.start() 即可。
javascript程序中提供了两类对话框六、pymysqltransition的短语
pymysql提供了python与mysql数据库相连的接⼝,即利⽤该库可以实现python与mysql数据库的连接,具体操作如下:
①创建连接:conn = t(host='127.0.0.1', port=3306, user='root', passwd='', db='对应名', charset='utf-8')
②创建游标:cursor = conn.cursor()
③执⾏sql语句,并返回受影响⾏数:effect_row = ute("select * from table")
④提交:connmit()
⑤关闭游标与连接:cursor.close(); conn.close()
七、mechanize
利⽤mechanize,可以实现对浏览器⾏为更好的模拟,常⽤有以下模拟⽅法:
①Browser():创建(打开)浏览器。
②open():打开⽹页。
③links():获取⽹页中所有链接;可以遍历 links() ⽅法,其下还有 .base_url 与 .url 属性。
spring mvc 版本④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是专门⽤于⽹页正⽂内容提取的第三⽅库,平时⽤的不多,但是可以轻松实现提取:
①导⼊:adability import Document
②使⽤:
正⽂:readable_article = Document(urllib.urlopen(url).read()).summary()
题⽬:readable_title = Document(urllib.urlopen(url).read()).short_title()
以上⼋个库便是在完成爬⾍时常需借助的第三⽅库,愿能够为⼤家带来帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论