Python爬取豆瓣电影信息遇到的问题

    技术2025-06-14  13

    Python爬取豆瓣电影信息

    说明

    本文章并不是爬取电影来看,而是获取电影信息。

    用到的库:

    前言

    当我打开百度搜索利用Python爬取豆瓣电影信息,随手打开一个爬取TOP250电影的教程。当我跟着以下步骤

    import requests import json from bs4 import BeautifulSoup # 构造请求头部 headers = { 'USER-AGENT':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } #网页地址 url = "https://movie.douban.com/top250?start=" # 发送请求,获得响应 response = requests.get(url=url,headers=headers) # 获取网页html html = response.text #解析 soup = BeautifulSoup(html,'lxml') #随便输出一个标签内容 tagData = soup.select('.hd') #输出 print(tagData)

    结果: 真香!!!就找个页面搞一搞。

    按年份来爬取电影信息

    当我按上面的代码将url改成https://movie.douban.com/tag/#/,然后也是随便找个标签试试能不能拿到数据。

    import requests import json from bs4 import BeautifulSoup # 构造请求头部 headers = { 'USER-AGENT':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } #网页地址 url = "https://movie.douban.com/tag/#/" # 发送请求,获得响应 response = requests.get(url=url,headers=headers) # 获取网页html html = response.text #解析 soup = BeautifulSoup(html,'lxml') #随便输出一个标签内容 tagData = soup.select('.article') #输出 print(html)

    结果: 回去看看页面的F12。发现没有问题啊,是有数据的,怎么拿不到呢。。。。

    解决

    回去代码观察爬取下来的html网页发现

    数据显示的是这段js代码,看到这里意识到数据可能是加载html页面之后再嵌入进去的。既然看的到电影信息,说明肯定是接收到数据的。打开一下F12查看请求URL URL地址:https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0&year_range=2020,2020 通过postman软件去访问请求地址 可以,直接返回json数据,谢谢你了。都不用BeautifulSoup解析页面

    最终代码

    import requests import json # 构造请求头部 headers = { 'USER-AGENT':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } yearList = [2020 , 2010 , 2000 , 1990 , 1980 , 1970, 1960] for year in yearList: #网页地址 url = "https://movie.douban.com/j/new_search_subjects?sort=S&range=0,10&tags=&start=0&year_range="+str(year)+","+str(year+9) # 发送请求,获得响应 response = requests.get(url=url,headers=headers) # 获取网页html data = response.text #获取json jsonData = json.loads(data) # 从json中获取列表 data = jsonData['data'] print('年份:'+str(year)) #遍历 for key in data: print("片名:"+key['title']+" 评分:"+key['rate'],'')

    结果 至于请求URL中的参数详解可以看一下这个链接 https://www.cnblogs.com/fangtaoa/p/8366528.html

    Processed: 0.011, SQL: 9