本文为自己学习爬虫工具requests_html的笔记,也希望可以帮到刚学习爬虫的同学。

简单介绍

requests_html是对requests库的第二次封装,其中添加了像pyquery这样的解析HTML库,可以使用pip 进行安装。

PS:requests_html仅支持python3.6以上(包括3.6)的版本。

requets-html的GitHub链接

学习过程

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标签:

requests_html学习手册(1)

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']

requests_html学习手册(1)

首先在find()中输入相应的css,由于返回的是一个list ,取第一个元素。

然后获取这个节点的所有属性:节点.attrs

结果返回的是一个包含所有属性的字典,取其中的‘href’。

同理:节点.text

返回该节点包含的文本,相当于pyquery中的:节点.text()

 

相关文章: