parsel库入门使用实战
- 目的
- 网页分析
- 导入需要使用到的模块
- 封装请求头信息,请求url地址
- 初始化parsel对象
- 获取到所有的table标签
- 从table标签中提取出书籍各项信息
- 数据爬取结果
- 完整代码
目的
爬取豆瓣读书Top250页面
爬取第一页的25本书的书名,作者,出版社,出版日期,价格,评分,简介,详情链接
url地址:https://book.douban.com/top250
使用parsel.css得到的结果是一个特殊对象,这个对象可以再次使用css()方法
网页分析
首先打开url地址,查看网页源代码
可以发现,一对table标签对应一本书
所以,可以先使用css选择器获取到所有的table标签
再依次遍历这个table标签,获取table标签中书籍的各项信息
导入需要使用到的模块
1 2 | import requests import parsel |
封装请求头信息,请求url地址
1 2 3 4 5 6 7 8 9 | url = 'https://book.douban.com/top250' # 请求头信息 header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36' } # 请求数据 response = requests.get(url, headers=header) # 查看请求数据的结果的状态码 print(response.status_code) |
初始化parsel对象
1 | selector = Selector(response.text) |
获取到所有的table标签
1 | books = selector.css("table") |
从table标签中提取出书籍各项信息
可以看到,书名在 class为“pl2”的
标签内的 标签中,这里我们选择提取出 标签的 title 属性
1 | book_name = book.css('div.pl2 a::attr(title)').get() |
链接就是 标签中的 href 属性
1 | book_link = book.css('div.pl2 a::attr(href)').get() |
作者,出版时间,出版日期,价格在 class 为 pl 的
标签中
1 | author = book.css('p.pl::text').get() |
评分在 class 为 rating_nums 的 标签中
1 | book_score = book.css('span.rating_nums::text').get() |
简介在 class 为 inq 的 标签中
1 | brief = book.css('span.inq::text').get() |
数据爬取结果
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import requests from parsel import Selector url = 'https://book.douban.com/top250' # 请求头信息 header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36' } # 请求数据 response = requests.get(url, headers=header) # 查看请求数据的结果的状态码 print(response.status_code) selector = Selector(response.text) # 使用标签选择器,得到所有的table标签 books = selector.css("table") # 打印获取到的table标签的数量 print(len(books)) num = 0 # 遍历table标签,依次从每个table标签中提取出书籍的各项信息 for book in books: # 标记书号 num += 1 # 书名 book_name = book.css('div.pl2 a::attr(title)').get() # 作者,出版时间,出版社,价格 author = book.css('p.pl::text').get() # 链接 book_link = book.css('div.pl2 a::attr(href)').get() # 评分 book_score = book.css('span.rating_nums::text').get() # 简介 brief = book.css('span.inq::text').get().strip() print(f'{num}\t{book_name}\t{author}\t{book_link}\t{book_score}\t{brief}') |