爬虫百战(一):爬取当当网Top500本五星好评书籍
发布时间
阅读量:
阅读量
爬取当当网Top500本五星好评书籍
-
==实战前提:==
-
准备工作
-
- 撸代码
-
成果展示
实战前提:
掌握requests库的使用
熟悉re库,正则表达式的简单使用
可参考我的另外两篇博客进行学习
代码解读
准备工作
通过访问当当网的书籍排行榜专区并输入关键词"五星"即可查看相关商品
打开之后可以看到:


可以发现:
每一页显示二十本书
代码解读
点击下一页发现地址发生改变:
第二页
http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2
代码解读
我们可以在python中设置一个变量里来实现获取不同页数的内容
2.分析网页的请求和响应操作
鼠标右键点击检查或按F12,进入以下页面:

我们可以看到我们的请求头,还可以看到服务器返回来的数据:

3.分析我们将要抓取的关键信息

我们要的就是前500本书的
排名
书名
图片地址
作者
推荐指数
五星评分次数
价格
通过源码我们可以看到这些信息都被放在
- 标签中:


撸代码
思路:
1.通过page实现翻页功能
2.采用requests库发送请求至当当网
3.解析返回的HTML源码文档
4.完成数据解析后将其存储为csv格式文件,并便于后续分析处理
源码:
#-*- coding = utf-8 -*-
#@Time : ****/*/* **:**
#@Author : shy-2
#@File : 获取当当网五星图书排行榜Top500.py
#@Software : PyCharm
import requests
import re
import json
#请求当当网 获取源代码
def request_dangdang(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
except requests.RequestException:
return None
#解析源代碼
def parse_response(html):
pattern = re.compile('<li>.*?list_num.*?(\d+).</div>.*?<img src="(.*?)".*?class="name".*?title="(.*?)">.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span></div>.*?<p><span\sclass="price_n">¥(.*?)</span>.*?</li>',re.S)
items = re.findall(pattern,html)
for item in items:
#打印一下 查看結果
print(item)
yield {
'range': item[0],
'image': item[1],
'title': item[2],
'recommand': item[3],
'author': item[4],
'times': item[5],
'price': item[6]
}
#写入文件
def write_item_to_file(item):
print("开始写入数据:" + str(item))
with open('book.txt', 'a', encoding='UTF-8') as f:
f.write(json.dumps(item, ensure_ascii=False) + '\n')
f.close()
#主函数
def main(page):
url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-'+str(page)
html = request_dangdang(url)
items = parse_response(html)
for item in items:
write_item_to_file(item)
#实现翻页
if __name__=="__main__":
for i in range(1,26):
main(i)
代码解读
成果展示

全部评论 (0)
还没有任何评论哟~
