网络小说更好看?python爬取十四万条书籍信息告诉你

python免费学习资料以及群交流解答点击即可加入

项目完整代码 github地址 点击即可进入

因为最近微信读书出了网页版,加上自己也在闲暇的时候看了两本书,不禁好奇什么样的书更受欢迎,哪位作者又更受读者喜欢呢?话不多说,爬一下就能有个了解了。

页面分析


首先打开微信读书:https://weread.qq.com/,往下拉之后可以看到有榜单推荐,而且显示总共有25个榜单,有的榜单只有几百本,有的榜单却有几万本书。

在这里插入图片描述

打开“文学艺术榜”,可以看到一页显示了20条书本信息,下拉之后很容易就能发现这些书本信息是通过 AJAX 来加载的。

在这里插入图片描述

更关键的是,要获取这些书籍信息,只需要得到分类 ID 和参数 maxIndex。不过测试发现,每个分类只会返回50个页面的内容,也就是最多一千条书本信息。那么,如果只有这25个类别的榜单,能得到的数据还是有点少的,所以要怎么得到更多的数据呢?

细心的人可以发现右侧还能选择类别!如下图:

在这里插入图片描述

不过,查看这些元素发现里面是没有显示 URL 的,如下图:

在这里插入图片描述

但是这也不表示没有办法了,全局搜索一下就能找到了,如下图:

在这里插入图片描述

CategoryId 就是这个分类的 ID,也就是 URL 中“bookListInCategory/”后面的内容。至于 maxIndex,可以先设为0,然后发送请求得到这一分类的书本总数“totalCount”,然后根据这个书本总数是否超过一千来设置页数,就能得到这一分类下能够爬取到的所有 URL 了。

爬取步骤


前面经过分析已经知道只要拿到书本分类 ID,就能发送请求得到书本总数,也就能构造该分类下的所有页面的 URL 了。那要怎么得到所有分类呢?前面全局搜索的时候已经搜到了书本分类的 CategoryId 等信息,如下图:

在这里插入图片描述

所以只需先请求页面然后用正则匹配 CategoryId 就行了!然后对每个分类发送一次请求,用于获取书本总数,并构造这一分类下的所有 URL。这一部分代码如下:

1 def prepare(base_url=“https://weread.qq.com/web/category/1700000”) -> list:

2 “”"

3 prepare for crawler

4 :param base_url: weread base url

5 :return: page url list

6 “”"

7 def request(url) -> list:

8 “”"

9 request function

10 :param url: url

11 :return: page url list

12 “”"

13 page_urls = []

14 try:

15 res = requests.get(url=url, headers=headers)

16 if res.status_code == 200:

17 count = res.json()[“totalCount”]

18 cnt = 50 if count >= 1000 else count // 20

19 page_urls = [url + “?maxIndex={}”.format(i * 20) for i in range(cnt)]

20 else:

21 logging.error(“Error request!”)

22 except Exception as e:

23 logging.error(e)

24 finally:

25 return page_urls

26

27 resp = requests.get(url=base_url, headers=headers)

28 # check status code

29 if resp.status_code == 200:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

基本涵盖了95%以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
好的,以下是Python爬取当当、京东、亚马逊图书信息的代码实例。 首先,我们需要安装一些必要的库,比如requests、beautifulsoup4等。可以通过以下命令进行安装: ``` pip install requests beautifulsoup4 lxml ``` 接下来,我们以当当网为例,演示如何爬取图书信息。代码如下: ```python import requests from bs4 import BeautifulSoup # 获取页面HTML代码 def get_html(url): try: headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) response.raise_for_status() response.encoding = response.apparent_encoding return response.text except: return "" # 解析HTML代码,获取图书信息 def parse_html(html): soup = BeautifulSoup(html, 'lxml') book_list = [] for book in soup.find_all('div', class_='search_book_list'): book_dict = {} book_dict['title'] = book.find('a', class_='title').text.strip() book_dict['author'] = book.find('span', class_='search_book_author').text.strip() book_dict['publisher'] = book.find('span', class_='search_book_author').next_sibling.strip() book_dict['price'] = book.find('span', class_='search_now_price').text.strip() book_list.append(book_dict) return book_list # 主函数 if __name__ == '__main__': keyword = 'Python' url = 'http://search.dangdang.com/?key={}&act=input'.format(keyword) html = get_html(url) book_list = parse_html(html) for book in book_list: print(book) ``` 以上代码中,我们首先定义了一个名为get_html的函数,用于获取指定页面的HTML代码。该函数接受一个参数url,表示要获取的页面的URL。在函数中,我们使用requests库发送HTTP请求,并设置User-Agent头部,以模拟浏览器访问页面的行为。如果请求成功,我们会将页面的编码设置为自动判断的编码方式,并返回页面的HTML代码。 接下来,我们定义了一个名为parse_html的函数,用于解析HTML代码,并获取页面中的图书信息。该函数接受一个参数html,表示要解析的HTML代码。在函数中,我们使用beautifulsoup4库对HTML代码进行解析,并通过find_all方法找到页面中所有的图书信息。对于每一本图书,我们将其信息存储在一个字典中,并将所有图书信息存储在一个列表中,最后返回该列表。 最后,我们在主函数中调用了get_html和parse_html函数,分别获取页面HTML代码和解析HTML代码,然后打印获取到的图书信息。 类似地,我们还可以编写代码实现爬取京东、亚马逊等电商平台上的图书信息。具体实现方式与上面的代码类似,只需针对不同的页面进行稍微的调整即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值