显示页面讨论过去修订反向链接回到顶部 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== 第三十七章:网络爬虫实战 ====== ===== 本章目标 ===== 完成本章学习后,你将能够: * 使用requests获取网页 * 使用BeautifulSoup解析HTML * 使用Scrapy框架 * 处理反爬虫机制 ===== Requests基础 ===== <code python> import requests # GET请求 response = requests.get('https://api.github.com') print(response.status_code) print(response.json()) # 带参数 params = {'q': 'python', 'page': 1} response = requests.get('https://api.github.com/search/repositories', params=params) # POST请求 data = {'key': 'value'} response = requests.post('https://httpbin.org/post', json=data) # 设置Headers headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get('https://example.com', headers=headers) </code> ===== BeautifulSoup ===== <code python> from bs4 import BeautifulSoup import requests response = requests.get('https://example.com') soup = BeautifulSoup(response.content, 'html.parser') # 查找元素 title = soup.find('title') links = soup.find_all('a') divs = soup.find_all('div', class_='content') # CSS选择器 items = soup.select('.item > .title') # 获取文本 print(title.get_text()) </code> ===== Scrapy框架 ===== <code python> # myspider.py import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' start_urls = ['http://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.next a::attr(href)').get() if next_page: yield response.follow(next_page, self.parse) </code> ===== 反爬虫应对 ===== <code python> # 设置代理 proxies = { 'http': 'http://proxy:port', 'https': 'https://proxy:port', } response = requests.get(url, proxies=proxies) # 设置延迟 import time time.sleep(random.uniform(1, 3)) # 使用Session保持Cookie session = requests.Session() session.get('https://example.com/login') </code> ===== 本章实战 ===== 1. 爬取新闻网站 2. 爬取商品信息 3. 实现自动登录 下一章:[[python_course:chapter38|第三十八章:数据分析项目]] 登录 Detach Close 该主题尚不存在 您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。 python/chapter37.txt 最后更改: 2026/04/09 14:42由 张叶安 登录