花了三天时间系统的学习了爬虫,这里做个小总结。python爬虫主要用到requsts,urllib库,解析数据常用的有re,BeautifulSoup,PyQuery库。另外还有自动化爬取数据的selenium 库,以及爬虫框架pyspider,scrapy。
爬虫的开发流程
1.分析目标网站的网页结构
2.清晰目标数据有哪些
3.找到当前数据的请求,是否是ajax异步请求,一般先保存网页,然后本地打开,如果和原网页不同,则是异步请求。
反爬虫策略
1.根据UA屏蔽请求
2.只允许登录用户请求数据
3.用验证码限速爬虫
4.使用js动态生成token屏蔽爬虫
5.根据规则禁用IP
针对这些反爬虫策略常用的绕过策略有:
1.加上请求头
2.设置代理
3.使用PlantomJS模拟用户请求抓取
Request库
import requests
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0'
}
proxies = {
'http':'113.109.162.85:808'
}
res = requests.get(url,headers=headers,proxies=proxies)
print(res.text)
Urllib库
import urllib.rerquest
proxy_handler = urllib.request.ProxyHandler( {
'http':'113.109.162.85:808'
})
res = opener.open(url)
print(res.read().decode('utf-8')
re库
很多数据用正则匹配起来比较麻烦,这里我主要介绍两个正则符号
\s 匹配任意空白字符串,等价于 [\t\n\r\f].
\S 匹配任意非空字符串
例如:
1.1.1.1
80
两个td 之间有换行,所以正则为
(.*?)\s+(.*?)
Beautiful库
可以把源代码解析成 lxml xml两种格式。
soup = BeautifulSoup(html,'lxml')
soup = BeautifulSoup(html,'xml')
有三种选择器,
1.标签选择器
获取属性
soup.p['name']
获取内容
soup.p.string
2.标准选择器
find_all() 返回所有元素,返回结果是列表
find() 返回单个元素,
soup.find('table',{'id':'list-1'})
3.css选择器
通过select() 直接传入css选择器即可完成选择,返回类型是列表
通过标签名查找
soup.select('title')
通过class/id 查找
soup.select('#list')
组合查找
soup.select('p .list_1')
通过属性查找
soup.select('a[class="sister"]')
获取内容
soup.select('p .list_1').text()
在抓取数据的时候,我常用css 选择器。
PyQuery库
初始化html
from pyquery import PyQyery as pq
doc =pq(html)
print(doc('titile'))
初始化url
doc=pq(url)
print(doc('title'))
初始化文件
doc=pq(filename='demo.html')
print(doc('title')
css选择器
返回一个列表
print(doc('#list li'))
用法和bs 大同小异。
结语
学会熟练运用这些库,爬取一些网站没什么大问题。
领取专属 10元无门槛券
私享最新 技术干货