一、爬取前的准备工作
1. 选择一个网站:https://www.douban.com
2. 在进行爬取之前,我们先去看看它的robots协议。
协议网址:https://www.douban.com/robots.txt
3. 进入首页 https://movie.douban.com/top250?start=0&filter= ,打开检查工具,在Elements里查看这个网页,是什么结构。
点击开发者工具左上角的小箭头,选中“肖申克的救赎”,这样就定位了电影名的所在位置,审查元素中显示<span class="title">:<span>标签内的文本,class属性;推荐语和评分也是如此,<span class='inq'>,<span class='rating_num'>;序号:<em class>,<em>标签内的文本,class属性;推荐语<span class='inq'>;链接是<a>标签里href的值。最后,它们最小共同父级标签,是<li>。
4. 我们再换个电影验证下找的规律是否正确。
5. check后,我们再看一共10页,每页的url有什么相关呢?
第1页:https://movie.douban.com/top250?start=0&filter=
第3页:https://movie.douban.com/top250?start=50&filter=
第7页:https://movie.douban.com/top250?start=150&filter=
发现只有start后面是有变化,规律就是第N页,start=(N-1)*25
6. 基于以上分析,我们有两种写爬虫的思路。
思路一:先爬取最小共同父级标签 <li>,然后针对每一个父级标签,提取里面的序号/电影名/评分/推荐语/链接。
思路二:分别提取所有的序号/所有的电影名/所有的评分/所有的推荐语/所有的链接,然后再按顺序一一对应起来。
二、代码实现过程(思路一)
import requests# 引用requests库
from bs4 import BeautifulSoup# 引用BeautifulSoup库
res_films=requests.get('https://movie.douban.com/')# 获取数据
bs_films=BeautifulSoup(res_films.text,'html.parser')# 解析数据
fil_title=bs_films.find_all(class_='title')
fil_num=bs_films.find_all(class_="")
list_all=[]# 创建一个空列表,用于存储信息
for x in range(len(fil_num)):
list_films=[fil_num[x].text[18:-14],fil_title[x].find('a')['href']]
list_all.append(list_films)
print(list_all)