一、爬取的内容
在这里我们爬取的是当当图书网中小说图书畅销榜近7日的榜单图书数据,数据中的内容包括:标题、 评论、 推荐、 作者、 出版日期、 出版社、 售价、 原价、 折扣、 电子书价格、 详情页(链接)
二、数据爬取及代码实现
爬取步骤:
1. 发送请求
对于网址小说畅销榜-近7日畅销书排行榜-当当畅销图书排行榜发送请求
在这里能用requests就不用selenium,selenium采集速度相当而言比较慢,requests请求比较麻烦时,就用 selenium
--确定请求的url
--请求方式 用headers进行伪装python代码
url = 'http://bang.dangdang.com/books/bestsellers/01.03.00.00.00.00-recent7-0-0-1-1'
headers = { "User-Agent": 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36', }
2.获取数据(响应数据)
response = requests.get(url=url, headers=headers)
3.解析数据,提取我们想要的数据内容
selector = parsel.Selector(response.text) lis = selector.css('ul.bang_list li') # 遍历 attr()属性选择器 a::attr(title)提取的是a标签中的title属性 div:nth-child(5)组合选择器,选择第五个div标签 for li in lis: title = li.css('.name a::attr(title)').get() # 标题 href = li.css('.name a::attr(href)').get() # 详情页 comment = li.css('.star a::text').get().replace('条评论', '') # 评论 recommend = li.css('.tuijian::text').get().replace('推荐','') # 推荐 writer = li.css('div:nth-child(5) a::text').get() # 作者 date = li.css('div:nth-child(6) span::text').get() # 出版日期 press = li.css('div:nth-child(6) a::text').get() # 出版社 price_n = li.css('.price p:nth-child(1) .price_n::text').get() # 售价 price_r = li.css('.price p:nth-child(1) .price_r::text').get() # 原价 price_s = li.css('.price p:nth-child(1) .price_s::text').get().replace('折','') # 折扣 price_e = li.css('.price p:nth-child(2) .price_n::text').get() # 电子书价格
4.保存数据
# 创建一个字典 。保存数据,保存表格数据.csv dit = { '标题': title, '评论': comment, '推荐': recommend, '作者': writer, '出版日期': date, '出版社': press, '售价': price_n, '原价': price_r, '折扣': price_s, '电子书价格': price_e, '详情页': href, } csv_write.writerow(dit) # 写入数据
5.翻页爬取
# 遍历爬取26页数据内容 for page in range(1, 26): print(f"==========================正在采集第{page}页的数据内容=======================") # 每页停留时间 time.sleep(1.5) url = f'https://bang.dangdang.com/books/bestsellers/01.03.00.00.00.00-recent7-0-0-1-{page}'
完整代码如下:
import requests
import parsel
import csv
import time
f &#