Python爬虫练习三:爬取豆瓣电影分类排行榜 - 动作片top10%(动态加载网页的抓取)

    目标网址url:

    https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action=

    使用谷歌浏览器的检查功能对网站进行分析,发现需要爬取的内容在class‘movie-list-item playable unwatched’下。

    ok,我们按照之前的方式来爬取一下看看。

url='https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action='
res=requests.get(url)
res.encoding= 'utf-8'#该网页是以utf-8的编码形式显示的
soup=BeautifulSoup(res.text, 'html.parser')#使用美丽汤解析网页内容
print(soup)

    检查打印结果,发现get的信息中没有任何关于电影信息的。这是为什么呢?因为这个网页的所有电影信息都是动态加载的。

    转动鼠标滚轮,使页面朝下拉,你会发现,有更多的内容被加载进来了,查看监视器,class‘movie-list-item playable unwatched’的列数增加了。看来,静态网站的那一套在动态加载的网站上行不通了,那么该如何解决呢?

    点击监视器的Network--->XHR。继续朝下滑动滚轮,你会发现Name下的文件增加了!


    点击文件末尾为start=0&limit=20与start=20&limit=20的文件,比较检查,我们发现这正是我们要寻找的信息。


    通过比较,我们现在可以大胆猜想start指的是显示起始的电影序号,limit是每次请求显示的电影数目,信息是通过json的格式存储的。我们再点击Headers,发现如下内容:


    发现,获得的内容是通过GET url:‘https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20’来获取的。

    ok,现在我们知道怎么获取数据了,经测试,实际上我们可以直接start=0 limit=256,来直接获取全部top10的数据。但我们还是按照网站请求的方式每次20部,来获取。代码如下:

import requests
import json
#爬取豆瓣电影分类排行榜 - 动作片top10%的电影名、评分和豆瓣链接
url='https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start={}&limit=20'
filminfolist=[]#存放结果
for i in range(0,300,20):
    aimurl=url.format(i)
    res=requests.get(aimurl)
    jd=json.loads(res.text)#改成json格式方便读取数据
    for j in jd:
        filminfo={}#以字典存储单条数据
        filminfo['title']=j['title']
        filminfo['score'] = j['score']
        filminfo['url'] = j['url']
        filminfolist.append(filminfo)

打印filminfolist结果如下:

{'title': '这个杀手不太冷', 'score': '9.4', 'url': 'https://movie.douban.com/subject/1295644/'}
{'title': '七武士', 'score': '9.2', 'url': 'https://movie.douban.com/subject/1295399/'}
{'title': '蝙蝠侠:黑暗骑士', 'score': '9.1', 'url': 'https://movie.douban.com/subject/1851857/'}
{'title': '指环王3:王者无敌', 'score': '9.1', 'url': 'https://movie.douban.com/subject/1291552/'}
{'title': '搏击俱乐部', 'score': '9.0', 'url': 'https://movie.douban.com/subject/1292000/'}
{'title': '指环王2:双塔奇兵', 'score': '9.0', 'url': 'https://movie.douban.com/subject/1291572/'}
{'title': '将军号', 'score': '9.0', 'url': 'https://movie.douban.com/subject/1292778/'}

{'title': '指环王1:魔戒再现', 'score': '8.9', 'url': 'https://movie.douban.com/subject/1291571/'}

......

拓展一下:

DataFrame初识

使用Data Frame格式把刚才的数据保存进excel,通过使用套件pandas来实现。

代码如下:

import pandas
df=pandas.DataFrame(filminfolist)
df.to_excel('D:\\douban.xlsx')
总结:动态加载的网页,需要多观察监视器,分析得出真实的抓取页面。美丽汤是分析html格式的,json是分析json格式的,当然也可以使用正则表达式来分析。
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你好!对于菜谱网站,你可以使用 Python 的 requests 和 BeautifulSoup 库来实现。首先,你需要发送请求获网页的 HTML 内容,然后使用 BeautifulSoup 解析该内容,提出你所需的菜谱信息。 以下是一个简单的示例代码,以美食天下网站(www.meishij.net)为例: ```python import requests from bs4 import BeautifulSoup def get_recipe(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 在这里根据网页结构提菜谱信息 # 例如,获菜名和食材 recipe_name = soup.find('h1', class_='recipe-title').text.strip() ingredients = soup.find('div', class_='particulars').ul.find_all('li') ingredient_list = [] for ingredient in ingredients: ingredient_list.append(ingredient.text.strip()) # 输出菜谱名称和食材列表 print("菜谱名称:", recipe_name) print("食材列表:", ingredient_list) # 菜谱详情页的URL recipe_url = 'https://www.meishij.net/1' get_recipe(recipe_url) ``` 对于豆瓣 Top250 电影榜单,同样可以使用 requests 和 BeautifulSoup 库来实现。以下是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup def get_top250(): url = 'https://movie.douban.com/top250' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') movie_list = soup.find('ol', class_='grid_view').find_all('li') for movie in movie_list: # 获电影排名、名称和评分 rank = movie.find('em').text title = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text # 输出电影信息 print("排名:", rank) print("名称:", title) print("评分:", rating) print() get_top250() ``` 以上代码只是一个简单示例,你可以根据具体的网页结构和需求进行相应的修改和扩展。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值