个人主页:一ge科研小菜鸡-CSDN博客
期待您的关注
网络爬虫是一种自动化的程序,用于从互联网上抓取数据。Python 以其强大的库和简单的语法,是开发网络爬虫的绝佳选择。本文将详细介绍 Python 网络爬虫的基本原理、开发工具、常用框架以及实践案例。
网络爬虫的工作流程通常包括以下步骤:
requests
和 BeautifulSoup
import requests
from bs4 import BeautifulSoup
# 目标 URL
url = "https://example.com"
# 发送 GET 请求
response = requests.get(url)
response.encoding = 'utf-8' # 设置编码
html_content = response.text
# 解析 HTML
soup = BeautifulSoup(html_content, 'html.parser')
# 提取数据
titles = soup.find_all('h1') # 查找所有 h1 标签
for title in titles:
print(title.get_text())
lxml
import requests
from lxml import etree
# 目标 URL
url = "https://example.com"
# 发送 GET 请求
response = requests.get(url)
html_content = response.text
# 使用 lxml 解析
html_tree = etree.HTML(html_content)
# 提取数据
titles = html_tree.xpath('//h1/text()') # 提取所有 h1 标签的文本
for title in titles:
print(title)
使用 Selenium 处理需要 JavaScript 渲染的页面:
from selenium import webdriver
from selenium.webdriver.common.by import By
# 配置 WebDriver
driver = webdriver.Chrome() # 确保已安装 ChromeDriver
# 打开目标网站
driver.get("https://example.com")
# 等待页面加载
driver.implicitly_wait(10)
# 提取数据
titles = driver.find_elements(By.TAG_NAME, 'h1')
for title in titles:
print(title.text)
# 关闭浏览器
driver.quit()
pip install scrapy
scrapy startproject mycrawler
编辑 mycrawler/spiders/example.py
:
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
start_urls = ['https://example.com']
def parse(self, response):
for title in response.css('h1::text'):
yield {'title': title.get()}
scrapy crawl example
对于 JavaScript 渲染的内容,可以使用:
使用 Scrapy 和 Scrapy-Redis 实现分布式爬取:
目标:获取豆瓣电影 TOP 250 的标题、评分和链接。
import requests
from bs4 import BeautifulSoup
# 目标 URL
base_url = "https://movie.douban.com/top250"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
# 爬取所有页面
for page in range(0, 250, 25):
url = f"{base_url}?start={page}"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取电影信息
movies = soup.find_all('div', class_='item')
for movie in movies:
title = movie.find('span', class_='title').get_text()
rating = movie.find('span', class_='rating_num').get_text()
link = movie.find('a')['href']
print(f"标题: {title}, 评分: {rating}, 链接: {link}")
robots.txt
文件。Python 网络爬虫因其灵活性和高效性,已经成为数据采集领域的主力工具。从简单的 HTML 提取到动态页面抓取,从单机爬虫到分布式爬虫,Python 提供了丰富的工具和框架来满足各种需求。然而,在使用爬虫时,需注意合法合规,并对抓取的数据进行合理利用。通过不断学习和实践,你可以轻松掌握网络爬虫技术,为数据分析、机器学习等领域提供有力支持。