Python网页数据抓取教程:使用requests和BeautifulSoup快速上手

[id_759554427]id_1193428220]

Python网页数据抓取教程:使用requests和BeautifulSoup快速上手

使用 requests 以及 BeautifulSoup 来进行网页的抓取。首先要进行依赖的安装。

首先,你得安装 requests 库以及 beautifulsoup4 库。这两个库各自有着不同的用途,requests 库用于网页请求,而 beautifulsoup4 库则用于网页解析。

pip install requests beautifulsoup4

1.2 基本用法

requests 库可用来发送 HTTP 请求,以获取网页的 HTML 内容。BeautifulSoup 则用于对 HTML 内容进行解析,进而提取出所需的数据。

import requests
from bs4 import BeautifulSoup
# 发送 HTTP GET 请求
url = "https://www.example.com"
response = requests.get(url)
# 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')
# 提取标题
title = soup.title.text
print("网页标题:", title)
# 提取所有链接
links = soup.find_all('a')  # 查找所有  标签
for link in links:
    href = link.get('href')
    print("链接:", href)

代码解析:使用 BeautifulSoup 来进行特定数据的提取。

假设我们抓取一个网页,这个网页包含多个条目。然后,我们从这个网页中提取每个条目的标题和链接。

import requests
from bs4 import BeautifulSoup
url = 这是一个网址:https://quotes.toscrape.com/  # 一个简单的网页,包含名言和作者
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取每个名言和作者
quotes = soup.find_all('div', class_='quote')
for quote in quotes:
    text = quote.find('span', class_='text').text
    author = quote.find('small', class_='author').text
    print(f"名言: {text}, 作者: {author}")

- 进行安装依赖的操作。

lxml 是一个用于解析 HTML 和 XML 的库,且很强大。它比 BeautifulSoup 效率更高,适合对大型网页内容进行处理。

pip install requests lxml

2.2 基本用法

import requests
from lxml import html
# 发送请求
url = "https://quotes.toscrape.com/"
response = requests.get(url)
# 解析 HTML
tree = html.fromstring(response.text)
# 提取名言和作者
quotes = tree.xpath(这是一个以 `div` 标签为元素,其类名为 `quote` 的部分。)
for quote in quotes:
    text = quote.xpath(获取类名为“text”的元素的文本内容。)[0]
    author = quote.xpath(获取 class 为"author"的小元素的文本内容。)[0]
    print(f"名言: {text}, 作者: {author}")

- 可使用 Selenium 来抓取动态网页。

有些网页是借助 JavaScript 来进行动态加载内容的。使用 requests 以及 BeautifulSoup 或许无法获取到这些数据。在这种情况下,Selenium 能够模拟浏览器的行为,从而有助于你抓取这些动态加载的网页内容。

3.1 安装依赖

你需要去安装 selenium 这个工具,同时还需要安装一个浏览器驱动,例如 ChromeDriver 。

pip install selenium

同时,你需要去下载并且安装一个浏览器驱动,例如 ChromeDriver,还要把它的路径添加到环境变量里面。你可以从以下这些网址进行下载:

3.2 基本用法

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 设置 ChromeDriver 路径
driver = webdriver.Chrome(executable_path=“位于 /path/to/chromedriver 路径处”)
# 打开网页
driver.get("https://quotes.toscrape.com/js/" 这个链接指向了某个特定的资源,可能是与抓取 quotes 相关的 JavaScript 文件或页面。 它在特定的网站环境中被使用,用于获取或处理与 quotes 相关的数据或功能。 这个链接对于网站的特定功能或数据获取可能具有重要意义。)  # 一个动态加载的网页
# 等待页面加载
time.sleep(2)
# 获取页面内容
quotes = driver.find_elements(By.CLASS_NAME, 'quote')
for quote in quotes:
    text = quote.find_element(By.CLASS_NAME, 'text').text
    author = quote.find_element(By.CLASS_NAME, 'author').text
    print(f"名言: {text}, 作者: {author}")
# 关闭浏览器
driver.quit()

代码解析方面:其优势为 3.3 部分;在网页抓取方面:使用 Scrapy 框架来进行操作。

Scrapy 是一个高级框架,可用于爬取网站并提取数据。它适用于大规模网页抓取任务。此框架提供了更多功能,像并发请求、自动处理 cookies 以及错误重试等。

4.1 安装 Scrapy

pip install scrapy

4.2 创建一个 Scrapy 项目

scrapy startproject myspider

4.3 编写一个 Scrapy Spider

假设我们要爬取一个简单的网页,提取名言和作者。

import scrapy
class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [这是一个网址,其地址为 https://quotes.toscrape.com/ 。它指向一个特定的网站,在这个网站上可能有各种与引用相关的内容。]
    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('small.author::text').get(),
            }
        
        # 下一页
        next_page = response.css(li 的下一个元素的 a 属性的 href 值).get()
        if next_page:
            yield response.follow(next_page, self.parse)

4.4 运行 Scrapy Spider

在项目根目录下运行以下命令:

scrapy crawl quotes

优势 4.5 ,还有 5. 其他抓取方法,其中 5.1 是使用 pyquery 库。

pyquery 是一个类似 jQuery 的库。它能提供类似 jQuery 的 API。此 API 可用于解析 HTML 文档。也可用于操作 HTML 文档。

pip install pyquery

from pyquery import PyQuery as pq
# 获取网页内容
url = "https://quotes.toscrape.com/"
doc = pq(url)
# 提取名言和作者
for quote in doc('.quote').items():
    text = quote('.text').text()
    author = quote('.author').text()
    print(f"名言: {text}, 作者: {author}")

5.2 使用 requests-html 库

requests-html 是一个库,它结合了 requests 和 PyQuery。这个库是专为网页抓取而设计的,并且能够处理 JavaScript 渲染。

pip install requests-html

from requests_html import HTMLSession
session = HTML
Session()
url = "https://quotes.toscrape.com/js/"
response = session.get(url)
# 渲染 JavaScript
response.html.render()
# 提取名言和作者
quotes = response.html.find('.quote')
for quote in quotes:
    text = quote.find('.text', first=True).text
    author = quote.find('.author', first=True).text
    print(f"名言: {text}, 作者: {author}")

总结

Python 提供了多种强大的网页抓取方法,这些方法适用于不同类型的网页。其中,requests 和 BeautifulSoup 是最基础且简单的组合,它们适合抓取静态网页;Selenium 是一种强大的工具,可用于抓取动态加载的网页;Scrapy 是一个功能全面的框架,适用于大规模的抓取任务。选择合适的工具,能让你高效地抓取网页数据,并且可以将其应用于数据分析领域,还能应用于内容聚合等多个领域。

希望本文的介绍能帮助你理解网页抓取技巧,希望本文的代码示例能帮助你掌握网页抓取技巧。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读