python实现的一只从百度开始不断搜索的小爬虫

Python实现的一只从百度开始不断搜索的小爬虫

简介

本文介绍如何使用Python编写一个可以从百度开始不断搜索的小爬虫,并获取搜索结果中的信息。

实现步骤

  1. 安装相关库

我们需要使用requests和beautifulsoup4库进行网页的爬取和解析。可以通过以下命令安装:

pip install requests beautifulsoup4
  1. 网页的爬取

首先,我们需要访问百度,并获取搜索结果页面的HTML代码。可以使用requests库完成。代码示例如下:

import requests

# 请求百度
url = "https://www.baidu.com/s"
params = {
    "wd": "Python"
}
response = requests.get(url, params=params)
html = response.text

上面的代码中,我们使用requests.get()方法发送了一个GET请求到百度搜索页面,并将搜索的关键字设置为"Python"。可以根据需求修改关键字。注意到搜索页返回的HTML代码也可能会包含一些垃圾信息和不必要的广告,这里我们需要使用beautifulsoup4库对HTML代码进行解析和过滤。

  1. HTML代码的解析和过滤

首先,需要使用beautifulsoup库将HTML代码解析为一个DOM树。我们可以使用lxml解析器来解析HTML代码。代码示例如下:

from bs4 import BeautifulSoup

# 解析HTML代码
soup = BeautifulSoup(html, "lxml")

解析后,我们还需要过滤出搜索结果条目的信息。在百度搜索页面中,每一条搜索结果都包含在一个\

标签中,并具有类名为"c-container"。因此,我们可以通过以下代码来选取所有搜索结果的容器:

containers = soup.select(".c-container")

其中,select()方法中的参数".c-container"是CSS选择器,表示选取所有类名为"c-container"的标签。

  1. 获取搜索结果的信息

在选取了所有搜索结果容器后,我们还需要进一步从中提取出我们需要的信息,比如搜索结果的标题、URL、摘要等。因为不同搜索结果条目的结构可能不同,因此需要分别处理每个结果条目。下面是一个示例代码,用于提取第一个搜索结果的标题、URL和摘要:

# 获取第一个搜索结果的标题、URL和摘要
container = containers[0]
title = container.select_one("h3 a").text    # 提取标题
url = container.select_one(".c-showurl").text    # 提取URL
abstract = container.select_one(".c-abstract").text    # 提取摘要
print(title, url, abstract)

上面的示例代码中,我们使用了select_one()方法选取了一个\标签和两个类名分别为"c-showurl"和"c-abstract"的标签,然后使用.text属性来提取其中的文本内容。

  1. 实现循环搜索功能

到了这一步,我们就可以获取单个搜索结果的信息。如果要实现从百度开始不断搜索的小爬虫的话,需要使用循环实现。在每一轮循环中,我们需要从搜索结果的容器中选取下一页的URL,然后访问下一页,进而重复上面的步骤。下面是一个简单的示例代码:

import requests
from bs4 import BeautifulSoup

# 第一次搜索
url = "https://www.baidu.com/s"
params = {
    "wd": "Python"
}
response = requests.get(url, params=params)
soup = BeautifulSoup(response.text, "lxml")

# 搜索循环
for i in range(10):    # 设定循环次数为10
    containers = soup.select(".c-container")
    for container in containers:
        title = container.select_one("h3 a").text
        url = container.select_one(".c-showurl").text
        abstract = container.select_one(".c-abstract").text
        print(title, url, abstract)

    next_page_link = soup.select_one("#page a:last-child")
    if not next_page_link:    # 如果没有下一页,就退出循环
        break
    next_page_url = "https://www.baidu.com" + next_page_link["href"]
    response = requests.get(next_page_url)
    soup = BeautifulSoup(response.text, "lxml")

上面的示例代码中,我们使用了CSS选择器"#page a:last-child"选取了下一页链接的标签,并将其链接与"https://www.baidu.com"组合成完整的URL。如果没有下一页链接,就会退出循环。

示例说明

示例1:获取豆瓣电影TOP250的电影名和评分

下面是一个示例代码,用于爬取豆瓣电影TOP250的电影名和评分:

import requests
from bs4 import BeautifulSoup

url = "https://movie.douban.com/top250"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")

for i in range(10):    # 循环10页
    containers = soup.select(".info")
    for container in containers:
        name = container.select_one(".title").text
        score = container.select_one(".rating_num").text
        print(name, score)

    next_page_link = soup.select_one(".next a")
    if not next_page_link:    # 如果没有下一页,就退出循环
        break
    next_page_url = url + next_page_link["href"]
    response = requests.get(next_page_url)
    soup = BeautifulSoup(response.text, "lxml")

上面的示例代码中,我们使用requests库发送了GET请求,然后使用beautifulsoup4库对HTML代码进行解析。接下来,我们选取了所有电影信息容器,并使用select_one()方法选取了其中的电影标题和评分。最后,我们使用循环和分页链接来实现了对豆瓣电影TOP250列表的爬取。

示例2:获取糗事百科的最新段子

下面是一个示例代码,用于爬取糗事百科的最新段子:

import requests
from bs4 import BeautifulSoup

url = "https://www.qiushibaike.com/text/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")

while True:    # 循环获取段子
    containers = soup.select(".article")
    for container in containers:
        author = container.select_one(".author h2").text
        content = container.select_one(".content span").text.strip()
        print(author, content)

    next_page_link = soup.select_one(".next")
    if not next_page_link:    # 如果没有下一页,就退出循环
        break
    next_page_url = "https://www.qiushibaike.com" + next_page_link["href"]
    response = requests.get(next_page_url)
    soup = BeautifulSoup(response.text, "lxml")

上面的示例代码中,我们使用requests库发送了GET请求,然后使用beautifulsoup4库对HTML代码进行解析。接下来,我们选取了所有段子容器,并使用select_one()方法选取了其中的作者和段子内容。最后,我们使用循环和分页链接来实现了对最新段子的爬取。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现的一只从百度开始不断搜索的小爬虫 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python入门教程之识别验证码

    那我来讲解关于“Python入门教程之识别验证码”的攻略。 1. 前言 验证码是目前防止自动化机器人攻击的一种重要方式。而在自动化测试、爬虫等场景下,我们又需要自动识别验证码。因此,学习如何识别验证码也是学习Python的重要一环。 2. 主要技术 本教程将采用Python 3.7版本,涉及到如下技术: 图像处理 机器学习 神经网络 3. 环境和库的准备 首…

    python 2023年6月3日
    00
  • Python程序笔记20230306

    判断闰年 初始版本 year = input(‘请输入一个年份:’) while not year.isdigit(): year = input(“抱歉,您的输入有误,请输入一个整数:”) year = int(year) if year % 400 == 0: print(year, “是闰年!”) else: if year % 4 == 0 and …

    python 2023年4月17日
    00
  • Python实现LRU算法的2种方法

    Python实现LRU算法的2种方法 LRU算法是一种常见的缓存淘汰策略,它可以用于实现缓存系统。在本文中,我们将讲解Python实现LRU算法的2种方法,包括使用Python标准库的collections模块和手实现LRU算法。同时,我们还将提供两个示例说明,以帮助读者更好地理解LRU法的使用方法。 方法1:使用collections模块 Python标准…

    python 2023年5月13日
    00
  • python 实现将list转成字符串,中间用空格隔开

    在Python中,我们可以使用join()方法将列表转换为字符串,并使用空格作为分隔符。下面是一个示例,演示了如何使用join()方法将列表转换为字符串,并使用空格作为分隔符: lst = [‘apple’, ‘banana’, ‘orange’] str = ‘ ‘.join(lst) print(str) # 输出’apple banana orange…

    python 2023年5月13日
    00
  • python反编译教程之2048小游戏实例

    Python反编译教程之2048小游戏实例 这是一篇关于如何通过反编译Python代码的教程,我们将使用2048小游戏作为示例。本文的主要目的是为了让初学者了解Python代码的编译和反编译过程,以及一些基本的反编译工具和技术。 准备工作 首先,我们需要准备好Python源代码以及相应的编译后的字节码文件。通常情况下,Python源代码的扩展名为.py,而编…

    python 2023年5月31日
    00
  • python config文件的读写操作示例

    Python中,我们可以使用configparser模块来读写INI配置文件。INI配置文件的格式相对简单,每个配置文件由若干个Section组成,每个Section由若干个键值对KV对组成,键值对KV对由“键=值”格式组成。以下是完整的攻略: 创建config文件 # 导入configparser模块 import configparser # 创建一个C…

    python 2023年6月2日
    00
  • python3实现暴力穷举博客园密码

    Python3 实现暴力穷举博客园密码 简介 博客园是一个类似于Wordpress的博客平台,其密码由数字与字母组成,不易记住。为了避免忘记密码或是密码泄漏所带来的危害,我们可以使用python3实现博客园密码的暴力破解。 破解原理 暴力破解的原理就是穷举所有可能的密码,并尝试登录。在博客园中,密码是由6位数字与字母组成,总共有36^6=2176782336…

    python 2023年5月19日
    00
  • Python中的变量,参数和模块介绍

    下面我将为你详细讲解 Python 中的变量、参数和模块介绍。 变量 在 Python 中,变量是用于存储数据的容器。与其他编程语言类似,Python 中的变量可以存储不同类型的数据,如整数、浮点数、字符串等。甚至可以存储一个由其他变量组成的数据结构,如列表、字典等。 定义变量 在 Python 中定义变量的方式非常简单,只需要指定一个变量名,并将它的值赋给…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部