美文网首页
Python笔记-抓取当当网图书排行榜并保存到excel(正则表

Python笔记-抓取当当网图书排行榜并保存到excel(正则表

作者: 我开心0536 | 来源:发表于2020-02-20 21:28 被阅读0次

【功能】
抓取当当网图书排行榜并保存到excel (python 3.7版本下调试成功)
【特点】
1、获取数据的网址:http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1
2、本文涉及正则表达式,相对较复杂,所以制作了一个针对本例子的对比图,稍做参考
3、当前测试日期为2020年2月20日晚10点,目前抓取成功。但随着网站随时更新,可能数据源会有所改变而导致抓取失败。但抓取及保存原理是相通的

当当好书排行网页.jpg
当当好书排行网页采集结果.jpg
网页采集的正则表达式.jpg

【以下为代码,右上角有复制按钮,可一键复制】

#抓取当当网图书排行榜,并保存到excel    【我开心 Ver:20200220.01】
# 【5星图书】畅销榜-近30日5星图书榜-当当5星图书排行榜
# 网址:http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1
import requests
import re
import pandas as pd  # 导入pandas模块库,是读写EXCEL专用,安装时需要同时安装xlrd、xlwt、openpyxl这三个模块库

items=[] #定义列表,准备存放采集的数据
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}   # 定义模拟浏览器

#从当当网,爬取第1-4页的内容,可采集多页,本例仅采集4页做演示
for i in range(1, 5):
    url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(i)
    #开始抓取网页源代码
    response = requests.get(url,headers = header)
    #如果抓取成功 200是HTTP状态码,表示网络请求成功的意思,返回这个状态表示已经获取到数据了
    if response.status_code==200:
        html=response.text

    #打印网页源代码,看是否正确
    #print(html)

    #根据正则表达式,返回匹配对象 (\d+)表示一个或多个连续的数字   (.*?)表示匹配任意字符到下一个符合条件的字符。 具体如何写正则表达式,可以参考图片
    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">&yen;(.*?)</span>.*?</li>',re.S)
    items = items + re.findall(pattern, html)

#显示列表内容,看采集的内容是否正确
print(items)

# list转dataframe 。此处实际就是EXCEL中各列的标题,个数要与上面列的个数相对应
df = pd.DataFrame(items, columns=['顺序号','封面图片','书名','推荐','作者','五星评分次数','价格'])
print(df)

# 保存到本地excel
df.to_excel("C://当当好书榜.xlsx", index=False)
print('当当好书已经采集完成并保存到文件【当当好书榜.xlsx】,程序结束')

相关文章

网友评论

      本文标题:Python笔记-抓取当当网图书排行榜并保存到excel(正则表

      本文链接:https://www.haomeiwen.com/subject/yqmfqhtx.html