【爬虫实战】Python 爬取起点热榜,再也不怕没有小说看了!

最近看完一部小说《大奉打更人》,看得我热血沸腾。但是看完后,有选择困难症的我又不知道可以看什么了。

于是,我打算开发一个爬虫,爬取起点热榜。

一、导入所需库

我们使用 requests 来爬取网页,然后用 pyquery 解析出我们需要的信息。

import requests
from pyquery import PyQuery

二、爬取网页

起点网址:

  • 电脑版:www.qidian.com
  • 手机版:m.qidian.com

这里使用的是电脑版。

在这里插入图片描述

url = 'https://www.qidian.com/'

# 请求头
headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52'
}

html = requests.get(url=url, headers=headers)
html.encoding = 'utf-8'	# utf-8 编码,否则会出现乱码

三、解析网页

在这里插入图片描述

html = PyQuery(html.text)

# 找到热榜节点
ranks = html.find('div#rank-list-row.rank-list-row.cf.mb20 div.rank-list').items()

books = dict()

# 遍历每一个热榜
for rank in ranks:
    title = rank.find('h3 a.more').siblings().text()

    books[title] = list()

    # 遍历热榜的书
    lis = rank.find('div.book-list ul li').items()
    for li in lis:
        
        # 排名第一的书是展开的,结构会稍有不同,我们找到我们需要的信息
        if li.attr('class') == 'unfold':
            books[title].append([
                li.attr('data-rid'),	# 序号
                li.find('h4').text(),	# 书名
                li.find('p em').text()	# 月票
            ])
        else:
            books[title].append([
                li.attr('data-rid'),	# 序号
                li.find('div.name-box a.name').text(),	# 书名
                li.find('div.name-box i.total').text()	# 月票
            ])

四、输出

# 遍历
for key, values in books.items():
    print(key)	# 输出榜名
    for rank, name, total in values:
        # 如果长度超出,则省略13位以后的
        if len(name.encode('GBK')) > 30:
            name = name[:13] + '...' 
            
        # 补全
        name += ' ' * (30 - len(name.encode('GBK')))
        
        print(rank.ljust(2), name, total)

    print()	# 空一行

成果展示

在这里插入图片描述

完整代码

import requests
from pyquery import PyQuery

url = 'https://www.qidian.com/'

headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52'
}

# 主函数
def main():
	html = requests.get(url=url, headers=headers)
	html.encoding = 'utf-8'
    
	html = PyQuery(html.text)

    # 找到热榜节点
    ranks = html.find('div#rank-list-row.rank-list-row.cf.mb20 div.rank-list').items()

    books = dict()

    # 遍历每一个热榜
    for rank in ranks:
        title = rank.find('h3 a.more').siblings().text()

        books[title] = list()

        # 遍历热榜的书
        lis = rank.find('div.book-list ul li').items()
        for li in lis:

            # 排名第一的书是展开的,结构会稍有不同,我们找到我们需要的信息
            if li.attr('class') == 'unfold':
                books[title].append([
                    li.attr('data-rid'),	# 序号
                    li.find('h4').text(),	# 书名
                    li.find('p em').text()	# 月票
                ])
            else:
                books[title].append([
                    li.attr('data-rid'),	# 序号
                    li.find('div.name-box a.name').text(),	# 书名
                    li.find('div.name-box i.total').text()	# 月票
                ])

    # 遍历
    for key, values in books.items():
        print(key)	# 输出榜名
        for rank, name, total in values:
            # 如果长度超出,则省略13位以后的
            if len(name.encode('GBK')) > 30:
                name = name[:13] + '...' 

            # 补全
            name += ' ' * (30 - len(name.encode('GBK')))

            print(rank.ljust(2), name, total)

        print()	# 空一行



main()	# 主函数

input()	# 等待输入

— End —

感谢阅读!
原创不易,期待你的点赞、收藏与关注

本文收录于专栏 Python 爬虫
关注作者,互助交流,学习更多 Python 知识!

https://blog.csdn.net/weixin_48448842


推荐阅读

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 可以使用Python中的requests和BeautifulSoup库来爬取百度热榜。下面是一个简单的代码示例: ```python import requests from bs4 import BeautifulSoup url = 'http://top.baidu.com/buzz?b=1&fr=topindex' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 获取热榜列表 hot_list = soup.find_all('a', class_='list-title') # 输出热榜标题 for hot in hot_list: print(hot.text) ``` 这个代码会输出当前百度热榜的前20个热点话题的标题。你可以根据需要对代码进行修改来获取更多信息。 ### 回答2: Python可以使用第三方库如BeautifulSoup和Requests实现对百度热榜爬取。首先,我们需要安装这些库,可以通过pip install命令在命令行中安装。 然后,我们需要导入这些库,以便在Python脚本中使用。导入BeautifulSoup和Requests库后,我们可以使用requests库发送HTTP请求,获取百度热榜的网页内容。在请求中,我们可以使用用户代理,以防止被服务器阻止。 接下来,我们可以使用BeautifulSoup库对网页内容进行解析。我们可以找到热榜网页中包含热榜内容的HTML标签,并使用BeautifulSoup的一些方法来提取这些内容。例如,我们可以使用find方法根据标签名或属性来查找特定的元素,然后使用text属性来提取该元素的文本内容。 最后,我们可以将提取到的热榜内容保存到一个文件中,以便后续的分析和处理。我们可以使用Python的文件操作方法,如open和write,来创建并写入文件。 总结起来,Python爬取百度热榜的过程包括发送HTTP请求获取网页内容、使用BeautifulSoup解析网页内容、提取热榜信息,并将其保存到文件中。这样,我们就可以方便地获取和处理百度热榜的数据了。 ### 回答3: 要使用Python爬取百度热榜,可以利用Python的网络爬虫库和数据处理库来实现。以下是一个简单的Python爬取百度热榜的示例代码: ```python import requests from bs4 import BeautifulSoup url = 'https://top.baidu.com/board?tab=realtime' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') rankings = soup.find_all('a', class_='text-link') for ranking in rankings: title = ranking.text.strip() print(title) ``` 首先,我们导入`requests`和`BeautifulSoup`库,`requests`用于发送HTTP请求,`BeautifulSoup`用于解析HTML。然后,我们指定百度热榜的URL,并发送GET请求获取网页内容。 使用BeautifulSoup解析网页内容后,我们可以通过查找HTML中特定的标签和class来提取我们想要的信息。在这个例子中,百度热榜的热搜榜单标题使用`<a>`标签和`text-link`类来定义,因此我们使用`soup.find_all()`方法找到所有符合这一条件的元素。 最后,通过遍历这些元素,我们使用`.text`属性获取标题文本,并使用`.strip()`方法去除字符串两端的空格,最后将结果打印出来。 当然,这只是一个简单的示例,实际的爬虫项目可能需要更多的处理和调整,例如处理网页反爬虫机制、保存数据到数据库等。但是以上代码提供了一个基本的框架,用于理解如何使用Python爬取百度热榜的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值