这几天发现一个比较适合Python爬虫初学者的网站,我是跟着里边的kingname老师学习,这就当作是一个学习笔记里,有人想去听老师讲课,可以点这里。
单线程爬虫
如何伪装成浏览器呢?
import request
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"}
html = request.get(url, header = header)
html.encoding = 'utf-8'
在get或者post的时候加入User-Agent可以伪装成浏览器。至于怎么获得User-Agent,chrome->F12->Network->随便点一个接收的信息->Headers->Request Headers
。
解析HTML,获取有用信息
- 正则表达式
比较笨的办法。适用于网页简单,正则特别好写的情况,不用安装别的库了。 - 利用DOM解析HTML
BeautifulSoup,request啊什么的都提供了一些功能强大的DOM解析方法,便于使用。 - 利用XPath解析HTML
这其实也是DOM解析的一种吧?但是在爬一些比较复杂的网页时候,特别好用。
XPATH
怎么使用XPath?
from lxml import etree
selector = etree.HTML(html)
selector.xpath('XPATH')
XPath怎么写?
// :根节点
/ :往下层寻找
/text():提取文本内容
/@attr :提取属性内容
#提取div的id为first_div的文字内容
selector.xpath('//div[@id="first_div"]/text()')
#提取a标签的href属性
selector.xpath('//a/@href')
多线程爬虫
虽然Python有GIL,但是多线程还是可以在一定程度上提升爬取的速度。
from multiprocessing.dummy import Pool as ThreadPool
pools = ThreadPool(__max_core_num__)
results = pools.map(Spider_function, target_urls)
pools.join()
pools.close()
map(func, seq)函数是Python内置函数,用来接收seq内元素依此执行func后返回的值。