下面我会为你详细讲解一则Python 3的简单爬虫代码的完整攻略。本攻略包含了以下内容:
- 确定网页URL
- 网页请求和响应
- 网页内容解析和提取
- 代码实现整理
1.确定网页URL
在进行网页爬取前,我们需要确定要爬取的网页URL。举个例子,我们要爬取豆瓣电影Top250的相应页面,其URL为:https://movie.douban.com/top250。
2.网页请求和响应
在Python 3中,我们可以使用第三方的requests库进行网页请求和响应的操作。首先需要使用以下代码导入requests库:
import requests
然后通过requests库中的get()方法获取网页的响应内容:
r = requests.get('https://movie.douban.com/top250')
此时,变量r即为所请求的网页的响应。
3.网页内容解析和提取
在获取网页响应后,我们需要对网页内容进行解析和提取。这里推荐使用Python的BeautifulSoup库,使用它可以很方便地对 HTML 或 XML 进行解析。
首先利用以下代码导入BeautifulSoup库:
from bs4 import BeautifulSoup
然后将网页响应内容以及解析器传入BeautifulSoup构造函数:
soup = BeautifulSoup(r.text, 'html.parser')
现在我们就可以通过BeautifulSoup提供的方法来提取我们需要的内容了。以下是两个对提取步骤的简单示例。
示例一:提取Top250电影的排名和名称
我们可以发现,Top250电影的排名和名称均在HTML中的class为"hd"的div标签中。可以使用以下代码提取:
movie_list = soup.find('div', attrs={'class': 'article'}).find_all('div', attrs={'class': 'hd'})
for idx, movie in enumerate(movie_list):
title = movie.a.span.text.strip()
print("{0}: {1}".format(idx + 1, title))
上面代码中,首先利用find()方法找到class为"article"的div标签,然后在该div标签下找到所有class为"hd"的div标签,最后遍历所有电影信息,打印出Top250电影的排名和名称。
示例二:提取Top250电影的评分和评价人数
我们可以发现,Top250电影的评分和评价人数均在HTML中的class为"bd"的div标签中,其中class为"rating_num"的span标签包含了电影的评分,而class为"star"的div标签中包含了评价人数。可以使用以下代码提取:
movie_list = soup.find('div', attrs={'class': 'article'}).find_all('div', attrs={'class': 'bd'})
for idx, movie in enumerate(movie_list):
star = movie.find('div', attrs={'class': 'star'})
rating = star.find('span', attrs={'class': 'rating_num'}).text.strip()
comment = star.find_all('span')[3].text.strip()
print("{0}: rating {1}, comment {2}".format(idx + 1, rating, comment))
上面代码中,首先利用find()方法找到class为"article"的div标签,然后在该div标签下找到所有class为"bd"的div标签,最后遍历所有电影信息,打印出Top250电影的评分和评价人数。
4.代码实现整理
最后,我们将代码整合起来,得到一则Python 3的简单爬虫代码:
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/top250'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print("Top 250 movies in Douban:")
print("")
movie_list = soup.find('div', attrs={'class': 'article'}).find_all('div', attrs={'class': 'hd'})
for idx, movie in enumerate(movie_list):
title = movie.a.span.text.strip()
print("{0}: {1}".format(idx + 1, title))
print("")
print("Top 250 ratings in Douban:")
print("")
movie_list = soup.find('div', attrs={'class': 'article'}).find_all('div', attrs={'class': 'bd'})
for idx, movie in enumerate(movie_list):
star = movie.find('div', attrs={'class': 'star'})
rating = star.find('span', attrs={'class': 'rating_num'}).text.strip()
comment = star.find_all('span')[3].text.strip()
print("{0}: rating {1}, comment {2}".format(idx + 1, rating, comment))
以上代码将打印出Top250电影的排名、名称、评分和评价人数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一则python3的简单爬虫代码 - Python技术站