Python爬虫的简单实践
案例:爬取电商网站商品信息
目标网站:假设我们想要爬取一个电商网站上的商品信息,包括商品名称、价格、评论数量等。
实现过程:
- 网页请求:使用Python的请求库(例如Requests)发送HTTP请求,获取目标网页的HTML内容。
- 网页解析:使用HTML解析库(例如BeautifulSoup、lxml)对网页进行解析,提取出所需的数据。
- 数据抓取:根据网页结构和标签选择器,通过解析库提供的API方法,定位和提取商品信息的HTML元素。
- 数据处理:对抓取到的数据进行处理和清洗,例如去除多余的空格、转换数据类型等。
- 数据存储:将处理后的数据存储到适当的位置,如数据库、CSV文件或Excel表格。
- 反爬虫处理:如果目标网站采取了反爬虫策略,我们可能需要使用一些技术手段来绕过,例如设置请求头、使用代理IP、模拟登录等。
技术涉及:
- Web请求和响应处理:使用Requests库发送HTTP请求,获取网页内容,并处理响应状态码、Cookie等信息。
- HTML解析:使用HTML解析库(如BeautifulSoup、lxml)解析网页HTML内容,提取所需的数据。
- 数据清洗和处理:使用字符串处理和正则表达式等技术,对抓取到的数据进行清洗和处理。
- 数据存储:使用数据库(如MySQL、MongoDB)、文件(如CSV、Excel)、缓存(如Redis)等方式存储抓取到的数据。
- 反爬虫策略绕过:根据目标网站采取的反爬虫策略,使用技术手段绕过,如设置请求头、使用代理IP、模拟登录等。
值得注意的是,爬取网站数据时需要遵守网站的爬虫规则和法律法规,避免对目标网站造成过大的负荷或侵犯法律。在实际开发中,还应注意处理异常情况、优化爬虫效率、使用合理的并发机制等。
下面是简单的爬虫demo,演示了如何使用Python爬虫爬取电商网站的商品信息。请注意,这只是一个简单的示例,实际爬取过程中可能需要根据目标网站的具体结构和反爬虫策略进行适当的修改和优化。
import requests
from bs4 import BeautifulSoup
# 目标网页的URL
url = 'https://www.example.com/products'
# 发送HTTP请求,获取网页内容
response = requests.get(url)
# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 定位商品信息的HTML元素,提取商品名称和价格
product_elements = soup.find_all('div', class_='product')
for product_element in product_elements:
name = product_element.find('h2').text.strip()
price = product_element.find('span', class_='price').text.strip()
print('商品名称:', name)
print('价格:', price)
print('---')
上述代码的主要步骤如下:
- 使用
requests
库发送HTTP请求,获取目标网页的HTML内容。 - 使用
BeautifulSoup
库对网页内容进行解析,创建一个BeautifulSoup
对象soup
。 - 使用
soup
对象的find_all
方法定位商品信息的HTML元素,这里使用了div
标签和class
属性进行定位。 - 遍历商品元素列表,对每个商品元素使用
find
方法定位商品名称和价格的HTML元素,并提取对应的文本内容。 - 打印商品名称和价格。
实际爬取过程中还需要考虑异常处理、反爬虫策略绕过、数据清洗和存储等方面的问题。此外,对于大规模爬取和并发请求,还需要使用合适的技术手段进行优化,如使用线程池、设置请求头、使用代理IP等。
下面是一个更复杂的爬虫代码案例,演示了如何使用Python爬取豆瓣电影的信息,并将数据存储到MongoDB数据库中。代码思路
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
# MongoDB数据库连接配置
client = MongoClient('mongodb://localhost:27017/')
db = client['douban']
collection = db['movies']
# 目标网页的URL
url = 'https://movie.douban.com/top250'
def scrape_movie_details(url):
# 发送HTTP请求,获取网页内容
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析电影详情页的信息
details = {}
details['title'] = soup.find('h1').text.strip()
details['rating'] = soup.find('strong', class_='ll rating_num').text.strip()
details['director'] = soup.find('span', class_='attrs').find('a').text.strip()
details['actors'] = [actor.text.strip() for actor in soup.find_all('a', class_='actor')]
details['summary'] = soup.find('span', property='v:summary').text.strip()
return details
def scrape_top_movies():
# 存储所有电影的信息
all_movies = []
# 爬取豆瓣电影Top250的每页数据
for page in range(0, 250, 25):
page_url = f'{url}?start={page}'
response = requests.get(page_url)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析每页中的电影列表
movie_elements = soup.find_all('div', class_='info')
for movie_element in movie_elements:
# 解析电影标题和详情页链接
title_element = movie_element.find('span', class_='title')
title = title_element.text.strip()
details_url = movie_element.find('a')['href']
# 爬取电影详情页信息
details = scrape_movie_details(details_url)
details['title'] = tit服务器托管网le
# 将电影信息添加到列表中
all_movies.append(details)
return all_movies
# 爬取豆瓣电影Top250的信息
movies = scrape_top_movies()
# 将电影信息存储到MongoDB数据库
collection.insert_many(movies)
上述代码的主要步骤如下:
- 使用
requests
库发送HTTP请求,获取豆瓣电影Top250的网页内容。 - 使用
BeautifulSoup
库解析网页内容,定位电影列表的HTML元素。 - 遍历电影列表,提取每部电影的标题和详情页链接。
- 对于每部电影,发送HTTP请求获取其详情页的内容,并使用
BeautifulSoup
解析详情页。 - 解析电影详情页,提取电影的标题、评分、导演、演员和简介等信息。
- 将电影的详细信息存储在字典对象
details
中。 - 将每部电影的详细信息添加到列表
all_movies
中。 - 最后,将
a服务器托管网ll_movies
中的电影信息批量存储到MongoDB数据库中。
具体爬取过程中可能需要根据目标网站的具体情况进行适当的修改和优化。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
本文分享自华为云社区《kube-apiserver限流机制原理》,作者:可以交个朋友。 背景 apiserver是kubernetes中最重要的组件,一旦遇到恶意刷接口或请求量超过承载范围,apiserver服务可能会崩溃,导致整个kubernetes集群不可…