【2025最新】python爬虫超详细的8个常用的案例


以下是8个Python爬虫案例,每个案例都附有完整代码。请注意,这些代码仅供学习和研究目的使用,确保在遵守相关法律和网站服务条款的前提下进行操作。

案例1:爬取静态网页内容

目标:抓取一个静态网页的内容,并提取其中的特定信息(如新闻网站的标题和链接)。

代码示例:

import requests
from bs4 import BeautifulSoup
 
url = 'https://news.example.com'  # 替换为实际网址
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
 
# 提取标题和链接
for article in soup.find_all('article'):
    title = article.find('h2').text
    link = article.find('a')['href']
    print(f'Title: {
      
      title}\nLink: {
      
      link}\n')

案例2:抓取多个网页(分页)

目标:抓取一个分页网站的所有页面内容。

代码示例:

import requests
from bs4 import BeautifulSoup
 
base_url = 'https://blog.example.com/page/'  # 替换为实际网址的基础部分
num_pages = 5  # 替换为实际要抓取的页面数量
 
for page_num in range(1, num_pages + 1):
    url = f'{
      
      base_url}{
      
      page_num}'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    for article in soup.find_all('article'):
        title = article.find('h2').text
        link = article.find('a')['href']
        print(f'Page {
      
      page_num}: Title: {
      
      title}\nLink: {
      
      link}\n')

案例3:使用正则表达式提取数据

目标:从网页中提取特定格式的数据(如电子邮件地址)。

代码示例:

import requests
import re
 
url = 'https://contact.example.com'  # 替换为实际网址
response = requests.get(url)
content = response.text
 
# 使用正则表达式提取电子邮件地址
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', content)
for email in emails:
    print(email)

案例4:处理动态内容(使用Selenium)

目标:抓取使用JavaScript动态加载内容的网页。

代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
 
# 设置Chrome WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
url = 'https://dynamic.example.com'  # 替换为实际网址
driver.get(url)
 
# 等待动态内容加载完成(假设有一个特定的元素在内容加载完成后出现)
element = driver.wait_for_element_present(By.ID, 'dynamic-content-id')  # 替换为实际元素ID
 
# 提取数据
content = driver.page_source
# 使用BeautifulSoup或其他方法解析内容(此处省略)
 
# 关闭浏览器
driver.quit()
注意:wait_for_element_present 不是 Selenium 的标准方法,这里应使用 WebDriverWait 和 expected_conditions 来实现等待。

案例5:抓取带有登录认证的网页

目标:抓取需要登录认证的网页内容。

代码示例:

import requests
from requests.auth import HTTPBasicAuth
 
url = 'https://dashboard.example.com/data'  # 替换为实际网址
username = 'your_username'  # 替换为实际用户名
password = 'your_password'  # 替换为实际密码
 
response = requests.get(url, auth=HTTPBasicAuth(username, password))
if response.status_code == 200:
    data = response.json()  # 假设返回的是JSON格式的数据
    print(data)
else:
    print('登录失败')

案例6:使用Scrapy框架进行大规模网页抓取

目标:使用Scrapy框架进行大规模网页抓取。

步骤:

安装Scrapy:pip install scrapy
创建Scrapy项目:scrapy startproject myproject
创建爬虫:cd myproject; scrapy genspider myspider example.com
编辑爬虫文件(myproject/myspider/myspider.py):
代码示例:

import scrapy
 
class MySpider(scrapy.Spider):
    name = 'myspider'
    allowed_domains = ['example.com']
    start_urls = ['https://example.com']
 
    def parse(self, response):
        for article in response.css('article'):
            title = article.css('h2::text').get()
            link = article.css('a::attr(href)').get()
            yield {
    
    'title': title, 'link': link}

运行爬虫:scrapy crawl myspider -o output.json

案例7:爬取网页图片

目标:从网页中爬取图片并保存到本地。

代码示例:

import requests
import os
 
url = 'https://picsum.photos/200/300'  # 替换为实际图片网址
save_dir = 'pictures'
if not os.path.exists(save_dir):
    os.makedirs(save_dir)
 
response = requests.get(url, stream=True)
if response.status_code == 200:
    image_name = os.path.join(save_dir, 'test.jpg')
    with open(image_name, 'wb') as f:
        for chunk in response.iter_content(1024):
            f.write(chunk)
else:
    print('无法获取图片,状态码:', response.status_code)

案例8:爬取网页表格数据

目标:从网页中爬取表格数据并打印出来。

代码示例:

import requests
from bs4 import BeautifulSoup
 
url = 'http://your_domain/test.html'  # 替换为包含表格的实际网址
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
 
table = soup.find('table')
rows = table.find_all('tr')
 
for row in rows:
    cells = row.find_all('td')
    for cell in cells:
        print(cell.text, end=' ')
    print()

注意:以上代码中的网址(https://news.example.com、https://blog.example.com/page/ 等)均为示例网址,请根据实际情况替换为要抓取的网页的实际网址。同时,根据网页的具体结构和内容,可能需要对代码进行相应的调整和优化。


文未福利

编程资料、学习路线图、源代码、软件安装包等!【点击这里】可无偿分享!!!

① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ Python实战秦例,学习不再是只会理论④ Python漫画教程,手机也能学习

猜你喜欢

转载自blog.csdn.net/2401_89383448/article/details/145499178
今日推荐