携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情
X同学发私信说想要微信读书上的书籍清单做测试用,吓我一跳,原以为是要爬取APP呢,刚换了新笔记本难道要配置新的开发环境,结果是爬取一个PC端的网站,虚惊一场。
写在前面
本篇博客要爬取的页面是微信读书的PC端页面,不过并不是把书籍下载下来,只是抓取信息,所以整体实现难度不大,为了简化操作,我将书籍分类与书籍数目做成可输入项。
页面地址为:weread.qq.com/
要爬取的数据为:
点击具体某一分类榜单,地址为: weread.qq.com/web/categor… 后面的数字ID是类别号,页面下拉刷新,加载的页面是
注意这里除了类别号以外,后面的maxIndex就是每页的数据了,经过测试,数据呈现以下情形。
https://weread.qq.com/web/bookListInCategory/100000?maxIndex=0
https://weread.qq.com/web/bookListInCategory/100000?maxIndex=20
https://weread.qq.com/web/bookListInCategory/100000?maxIndex=40
...
有了上述的这些分析之后,剩下的就是逐步将其实现的过程了
编码时间
对于爬虫代码的编写,咱们爬虫百例课程中一直反复强调过,核心是分页数据,数据分析到之后,剩余的操作就变得简单了。 具体代码可查看,我将代码部分解释写到注释里面,因为没有特别难得地方,所以可以直接对照编写。
import requests
import json
headers = {
"user-agent": "Mozilla/5.0 使用你自己找到的UA即可",
"referer": "https://weread.qq.com/"
}
def get_category(category_num, totle):
pages = int(totle/20) # 获取总页码数
if (pages % 20) > 0: # 如果页码除以20还有余数,页码数+1,方便获取到全部数据
pages += 1
for page in range(0, pages+1):
url = f"https://weread.qq.com/web/bookListInCategory/{category_num}?maxIndex={page*20}" # f-strings格式化字符串
res = requests.get(url, headers=headers)
data = res.json()
books = data["books"]
write_data = []
for book in books:
title = book["bookInfo"]["title"]
author = book["bookInfo"]["author"]
price = book["bookInfo"]["price"]
intro = book["bookInfo"]["intro"] # 描述在写入csv文件的时候回出现换行,如果你写入csv文件,可以忽略
star = book["bookInfo"]["star"]
readingCount = book["readingCount"]
try:
lPushName = book["bookInfo"]["lPushName"].strip() # 去除空格
except Exception as e:
lPushName = ""
one_str = f"{title},{author},{price},{lPushName},{star},{readingCount}"
print(one_str)
# write_data.append(one_str)
# 数据量不大,可以每页数据都存储一次,数据量如果过大,需要调整
with open("./books.csv", "a", encoding="utf-8-sig") as f:
f.write(one_str+"\n")
if __name__ == "__main__":
totle = 21
category_num = 100000
# totle = int(input("请输入书籍总数目:")) # 解除注释,即可实现手动输入
# category_num = int(input("请输入书籍类别ID:"))
get_category(category_num, totle)
写在后面
本案例实现难度不大,核心还是分析,分析,分析。请牢记对于任何爬虫爱好者来说,熟练的分析页面,找到解析数据的突破口就相当于把爬虫实现了90%,而剩下的只是一些修修补补的造轮子过程。
广宣时间
如果你想跟博主建立亲密关系,可以关注 “
梦想橡皮擦”,近距离接触一个逗趣的互联网高级网虫。 博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。
【帮粉丝写爬虫】会成为这个系列的最后10篇内容,如果你有想要爬取的网站,在评论区告诉我吧