安装Python
确保你已经安装了Python,建议版本为3.6及以上。
安装所需库
a. 安装Scrapy
使用pip安装Scrapy:
pip install scrapy
b. 安装Selenium
安装Selenium及其依赖的浏览器驱动(如ChromeDriver):
pip install selenium
c. 安装requests库
安装requests:
pip install requests
d. 安装BeautifulSoup
安装BeautifulSoup:
pip install beautifulsoup4
e. 安装Jsoup
安装Jsoup:
pip install jsoup
f. 安装PhantomJS
下载PhantomJS并安装对应的Python绑定:
# 下载并安装最新版本 wget https://github.com/phantomjs/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-windows.zip # 解压并安装 python setup.py install
编写Scrapy爬虫
创建一个新项目,进入项目目录:
scrapy startproject myspider cd myspider
创建爬虫文件(如my_spider.py):
from scrapy.spiders import Crawler
from scrapy.http import Request
from scrapy.utils.log import log
class MySpider(Crawler):
def start_requests(self):
log.info("Starting crawl")
yield Request(
'https://www.baidu.com',
callback=self.parse,
meta={'page': 'home'}
)
def parse(self, response):
log.info("Response status: %s", response.status)
log.info("Response text: %s", response.text)
# 将数据保存或处理
# 创建并运行爬虫
scrapy crawl myspider
使用Selenium抓取动态内容
编写一个示例脚本(如selenium_demo.py):
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 初始化Chrome选项
options = Options()
options.headless = True # 无头模式
# 初始化ChromeDriver
driver = webdriver.Chrome(options=options)
try:
# 打开百度首页
driver.get('https://www.baidu.com')
# 等待页面加载
element = WebDriverWait(driver, 10).until(
lambda x: x.find_element_by_tag_name('h1')
)
print(element.text)
except Exception as e:
print(f"错误信息:{e}")
# 关闭浏览器
driver.quit()
使用requests抓取网页内容
编写一个简单的requests示例(如requests_demo.py):
import requests
# 发送GET请求
response = requests.get('https://www.baidu.com', headers={
'User-Agent': 'Mozilla/5. (Windows NT 10.; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58..3029.110 Safari/537.3'
})
print(response.status_code)
print(response.text)
使用BeautifulSoup解析HTML
编写一个BeautifulSoup示例(如beautiful_soup_demo.py):
from bs4 import BeautifulSoup
import requests
# 发送请求并获取响应
response = requests.get('https://www.example.com', headers={
'User-Agent': 'Mozilla/5. (Windows NT 10.; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58..3029.110 Safari/537.3'
})
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.find_all('h1')) # 找到所有h1标签
使用Jsoup抓取网页内容
编写一个Jsoup示例(如jsoup_demo.py):
from bs4 import BeautifulSoup
import requests
# 发送请求
response = requests.get('https://www.jsoup.org', headers={
'User-Agent': 'Mozilla/5. (Windows NT 10.; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58..3029.110 Safari/537.3'
})
# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.find_all('h1')) # 找到所有h1标签
使用PhantomJS抓取动态渲染内容
编写一个PhantomJS示例(如phantomjs_demo.py):
from phantomjs import PhantomJS
driver = PhantomJS()
driver.start()
try:
# 打开百度首页
driver.open('https://www.baidu.com')
# 等待加载
driver.wait()
# 提取网页内容
content = driver.page_content()
print(content)
finally:
driver.close()
运行代码
运行编写好的Python脚本,根据需要选择不同的工具来抓取所需的网页内容。
处理IP被封的问题
在请求中添加代理和处理头部信息:
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:108',
}
headers = {
'User-Agent': 'Mozilla/5. (Windows NT 10.; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58..3029.110 Safari/537.3'
}
response = requests.get('https://www.example.com', proxies=proxies, headers=headers)
重试机制
在Scrapy中配置重试:
from scrapy.settings import Settings
settings = Settings()
# 配置重试设置
settings.set('RETRY_HTTPCLIENT', 3)
settings.set('RETRY_HTTPERRORS', ('4xx', '5xx'))
处理动态加载内容
在Selenium中使用 WebDriverWait 确保元素加载完成:
from selenium import WebDriverWait
from selenium.webdriver.chrome import Chrome
from selenium.webdriver.common.by import By
# 初始化浏览器
driver = Chrome()
driver.get('https://www.example.com')
try:
# 等待元素加载
element = WebDriverWait(driver, 10).until(
lambda x: x.find_element_by_tag_name('h1')
)
print(element.text)
except:
print("元素未找到")
driver.quit()
根据你的具体需求选择合适的工具,如果只是简单的静态网页抓取,Scrapy和requests库可能就足够了,如果需要处理动态加载的内容或模拟浏览器操作,Selenium或PhantomJS会更适合,BeautifulSoup和Jsoup则适合对HTML进行解析和操作,逐步尝试这些工具,可以帮助你更好地掌握网页抓取技术。









