爬取豆瓣电影信息-BeautifulSoup
1.分析网页结构及爬取
- 爬取网页小截图
- 建议大家用谷歌浏览器,fn+F12,打开如下界面,可以发现,每一条记录都存放在“
”中,下面第二幅图,是第一个li标签下的内容。
实现网页翻页爬取
- 逐个单价,找到url之间的规律:
就此例题举例,start=0,25,50,75,…,可以找到页面之间的规律,每次加25,同时也是25的倍数。
不同页面情况对比 |
https://movie.douban.com/top250?start=0&filter= |
https://movie.douban.com/top250?start=25&filter= |
https://movie.douban.com/top250?start=50&filter= |
https://movie.douban.com/top250?start=75&filter= |
- 获取“后页”按钮或者网页超链接,依次访问实现爬取
- 采用网页自动操作技术,获得“后页”按钮或者超链接进行自动单击跳转,如Selenium技术的鼠标单击事件。
爬取实现代码如下
import pandas as pd
from bs4 import BeautifulSoup
import requests
def crawl(url,a1,a2,a3,a4,a5):
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} #请求头
r = requests.get(url,headers=head)
html=r.text
soup=BeautifulSoup(html,'html')
for tag in soup.find_all(attrs={'class': 'item'}):
#爬取序号
num=tag.em.string
a1.append(num)
print(num)
#电影名称
name=tag.find_all(attrs={'class': 'title'})
zwname=name[0].get_text() #或者 zwname=name[0].string
a2.append(zwname)
print(zwname)
#爬取网页链接
url_name=tag.find(attrs={'class': 'hd'}).a
urls=url_name.attrs['href']
a3.append(urls)
#爬取评分
info=tag.find(attrs={'class': 'star'}).get_text()
info=info.replace('\n','').replace('.',',评价人数:').replace('人评价','')
a4.append(info)
print(info)
#获得评语
info1=tag.find(attrs={'class': 'inq'})
if(info1):
content=info1.get_text()
print(content)
a5.append(content)
else:
a5.append(info1)
if __name__ == '__main__':
N=10
a1,a2,a3,a4,a5=[],[],[],[],[]
for j in range(N):
url = 'https://movie.douban.com/top250?start='+str(j*25)+'&filter=' #实现网页翻转
crawl(url,a1,a2,a3,a4,a5)
data=pd.DataFrame({'爬取序号':a1,'电影名称':a2,'爬取网页链接':a3,'爬取评分':a4,'获得评语':a5})
data.to_excel('E:\C盘数据\data3.xlsx',sheet_name='250个电影推荐') #数据保存,记得修改一下路径
爬取效果(爬取评分那里可以完善一下,分成2个属性)
喜欢的给个小关注,学院自创公众号,期待大家的建议与推荐。