本文为自己学习爬虫工具requests_html的笔记,也希望可以帮到刚学习爬虫的同学。
简单介绍
requests_html是对requests库的第二次封装,其中添加了像pyquery这样的解析HTML库,可以使用pip 进行安装。
PS:requests_html仅支持python3.6以上(包括3.6)的版本。
学习过程
1、简单示例
开始构造请求:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://www.qidian.com/free')
print(r, type(r))
# <Response [200]> <class 'requests_html.HTMLResponse'>
HTMLSession请求返回的是一个HTMLResponse类
接下来进行HTML解析:
html = r.html
print(html, type(html))
# <HTML url='https://www.qidian.com/free'> <class 'requests_html.HTML'>
返回了一个解析后的HTML类。对于它,我们可以像使用PyQuery的方法一样,对其使用find()方法可以查询节点。
例如,爬取相关的li标签:
books = html.find('.book-img-text li')
print(books)
print(type(books))
# 运行结果
[<Element 'li' data-rid='1'>, <Element 'li' data-rid='2'>, <Element 'li' data-rid='3'>, <Element 'li' data-rid='4'>, <Element 'li' data-rid='5'>, <Element 'li' data-rid='6'>, <Element 'li' data-rid='7'>, <Element 'li' data-rid='8'>]
<class 'list'>
由结果可知request-HTML的find()方法会返回一个列表,包含了符合条件的节点。
接下来我们遍历列表,提取每个图书的信息:
for book in books:
url = book.find('.book-mid-info > h4 > a')[0].attrs['href']
name = book.find('.book-mid-info > h4 > a')[0].text
author = book.find('.book-mid-info .author .name')[0].text
bookinfo = {
'name': name,
'author': author,
'url': url,
}
print(bookinfo)
# 运行结果:
{'name': '魔改大唐', 'author': '麻烦', 'url': '//book.qidian.com/info/1013726956'}
{'name': '重生之八十年代新农民', 'author': '金01', 'url': '//book.qidian.com/info/1012392200'}
{'name': '我能看见战斗力', 'author': '臭猪胖乎乎', 'url': '//book.qidian.com/info/1010622657'}
...
解析:
url = book.find('.book-mid-info > h4 > a')[0].attrs['href']
首先在find()中输入相应的css,由于返回的是一个list ,取第一个元素。
然后获取这个节点的所有属性:节点.attrs
结果返回的是一个包含所有属性的字典,取其中的‘href’。
同理:节点.text
返回该节点包含的文本,相当于pyquery中的:节点.text()