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

yizhihongxing

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 recursive function callspython递归函数调用 【发布时间】:2023-04-04 02:37:01 【问题描述】: 我正在尝试实现一个递归函数,但遇到了一些困难,不胜感激。例如,让我们尝试创建一个名为 sliding 的函数来执行此操作 sliding(“python”, 2) [“py”, “yt”,…

    Python开发 2023年4月6日
    00
  • Python入门教程(十八)Python的For循环

    Python的for循环是一个非常常用的控制结构,它可以与列表,元组,字典等Python内置数据结构一起使用,用于遍历序列中的元素。在本篇文章中,我们将给大家介绍有关Python的for循环的完整攻略,包括了for循环的语法、循环遍历和嵌套循环等内容。 一、Python的For循环语法 Python的for循环语法如下所示: for 变量 in 可迭代对象:…

    python 2023年6月5日
    00
  • python实现员工管理系统

    让我来详细讲解如何使用Python实现员工管理系统。我们将会用到Python中的基础数据类型和数据结构,以及文件读写和函数等知识点。整个流程分为以下几步: 定义员工类 我们需要定义员工类,其中包含员工的姓名、工号、职位和薪水等信息。一个简单的员工类可以定义为: class Employee: def __init__(self, name, emp_id, …

    python 2023年5月30日
    00
  • Python的线程使用队列Queue来改造转账场景

    首先我们需要了解Python中的队列Queue。Queue是Python内置的线程安全的队列,它适用于多线程编程中,在队列两端通过不同的线程来操作,实现多线程之间的通信与同步。 接下来,我们将使用Queue改造转账场景。假设我们有一个转账程序,需要将一笔金额从账户A转到账户B中。初始时,A账户余额为1000元,B账户余额为500元。直接实现方式如下所示: d…

    python 2023年5月19日
    00
  • Python多进程编程常用方法解析

    Python多进程编程常用方法解析 Python作为一门高级编程语言,在多进程编程方面表现优异。多进程编程可以有效地利用计算机的多核心CPU资源,加速程序执行速度,提高程序的效率和性能。 本文将介绍Python多进程编程常用的方法并提供示例进行说明。 多进程编程常用方法 1. multiprocessing模块 multiprocessing模块是Pytho…

    python 2023年5月19日
    00
  • python使用requests库爬取拉勾网招聘信息的实现

    Python 使用 requests 库爬取拉勾网招聘信息的实现 环境准备 首先,我们需要确保 Python 安装了 requests 库。如果没有安装,可以使用以下命令进行安装: pip install requests 分析网页结构 在使用 requests 爬取拉勾网招聘信息前,我们需要先分析网页的结构,以便于编写代码。以下是拉勾网的招聘页面的网址: …

    python 2023年5月14日
    00
  • Python3环境安装Scrapy爬虫框架过程及常见错误

    Python3环境安装Scrapy爬虫框架过程及常见错误 Scrapy是一个Python编写的开源网络爬虫框架,用于抓取网站并从中提取数据。本文将详细讲解Python3环境安装Scrapy爬虫框架过程及常见错误的解决方法。 安装Scrapy 在安装Scrapy之前,需要确保已经安装了Python3和pip。可以使用以下命令检查Python3和pip是否已经安…

    python 2023年5月13日
    00
  • python中f字符串以及其常见用法总结

    Python中f字符串以及其常见用法总结 什么是f字符串? 在Python 3.6版本开始,Python增加了一种新的字符串格式化方法,叫做f字符串(f-string),即在字符串中使用特殊的表达式来引用变量或表达式的值。 基本语法 f字符串以字母f或F开头,然后在字符串中使用花括号{}来包含变量或表达式。变量或表达式将自动被计算并插入到字符串中。 下面是一…

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