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使用Turtle模块绘制国旗的方法示例

    以下是关于”Python使用Turtle模块绘制国旗的方法示例”的完整攻略: 1. Turtle模块基础 Turtle模块是Python的一个绘图库,在绘制图形的过程中,用户可以通过各种方法控制画笔的移动、旋转、颜色等属性。Turtle模块的基本用法如下: 导入Turtle模块 import turtle 创建Turtle对象 t = turtle.Turt…

    python 2023年5月18日
    00
  • 浅析Python中线程以及线程阻塞

    下面我将为大家详细讲解“浅析Python中线程以及线程阻塞”的攻略。 线程简介 线程是操作系统中最小的调度单位,是进程中的一个执行流程。在同一个进程中的线程共享该进程的内存空间,因此线程之间可以直接进行交流和数据共享。Python中通过threading模块来创建和管理线程。 创建线程 Python中的线程可以通过直接创建Thread对象,并调用start(…

    python 2023年5月19日
    00
  • python 搭建简单的http server,可直接post文件的实例

    在Python中,我们可以使用http.server模块来搭建一个简单的HTTP服务器。本文将介绍如何使用http.server模块搭建一个简单的HTTP服务器,并提供两个示例,演示如何直接POST文件。 1. 搭建简单的HTTP服务器 首先,我们需要使用http.server模块搭建一个简单的HTTP服务器。以下是一个示例,演示如何使用http.serve…

    python 2023年5月15日
    00
  • python爬虫入门(九)Scrapy框架之数据库保存

    豆瓣电影TOP 250爬取–>>>数据保存到MongoDB 豆瓣电影TOP 250网址 要求: 1.爬取豆瓣top 250电影名字、演员列表、评分和简介 2.设置随机UserAgent和Proxy 3.爬取到的数据保存到MongoDB数据库  items.py # -*- coding: utf-8 -*- import scrapy c…

    爬虫 2023年4月13日
    00
  • Python采集腾讯新闻实例

    Python采集腾讯新闻实例可以分为以下几个步骤: 确定采集目标:确定要采集的网页的URL以及需要采集的内容。 获取网页源代码:使用Python的requests库向目标URL发送GET请求,获取网页的HTML源代码。 解析网页源代码:使用Python的BeautifulSoup库将HTML源代码解析成一个BeautifulSoup对象,方便后续操作。 提取…

    python 2023年5月13日
    00
  • Python txt文件常用读写操作代码实例

    Pythontxt文件常用读写操作代码实例 在Python中,读写文本文件是非常常见的操作。在本文中,我们将讨论一些常用的文件读写操作,并附带代码实例。 读取文本文件 要读取文本文件,我们可以使用Python内置的open()函数。下面是一个简单的示例,展示了如何使用该函数读取一个文本文件,并将其中的内容打印出来。 with open(‘example.tx…

    python 2023年5月13日
    00
  • python 检测图片是否有马赛克

    要检测图片是否有马赛克,可以采用以下步骤: 1.导入相关模块 首先,需要导入Python Pillow库和Numpy库。Pillow库是Python中用于处理图片的第三方库,Numpy是Python中用于科学计算的库。 from PIL import Image import numpy as np 2.载入图片并转换为Numpy数组 使用Pillow库中的…

    python 2023年5月18日
    00
  • Python 如何截取字符函数

    下面进入题目的讲解。 1. Python 截取字符串基本语法 Python 截取字符串的基本语法为: string[start:end:step] 其中,string 是要截取的字符串;start 是截取的起始位置,包含该位置的字符;end 是截取的结束位置,不包含该位置的字符;step 是截取的步长,可以省略,默认为 1。需要注意的是,选取的字符所在的索引…

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