文章目录
以下是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漫画教程,手机也能学习