Python爬虫—requests模块爬取豆瓣电影top250-3

requests模块巩固

        我们继续进一步的巩固和学习requests

        案例3:

                需求:爬取豆瓣电影分类排行榜喜剧的详细数据

 

import requests
import json

#1.指定 url
url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=20&limit=20'

# 将上述?后携带的参数的数据进行封装   因为使用get 方法,所以用params
url = 'https://movie.douban.com/j/chart/top_list?'
param = {
    'type': '24',
    'interval_id': '100:90',
    'action': '',
    'start': '0',  #表示从库中的第几部开始取
    'limit': '20'   #表示一次取出的个数
}
# UA伪装
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'
}

#获取响应数据
response = requests.get(url=url,params=param,headers=headers)
list_data = response.json()

# 进行持久化存储
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)

print("Over!")

运行后,则爬取到了一个json文件。

我们将其复制下来,找一个json在线解析的网站,复制进去,可以发现我们得到的结果。

不过,这是没有经过处理的数据。所以还是比较乱的。

我们来写一个进行处理的,仅爬取豆瓣排行榜前250的电影,并保存下来。

可知,电影是要翻页的,每一页只有25个电影,一共10页。我们观察每个页面对应的url有何区别:

第二页

第三页

所以易知需要通过改变  start= 对应的数据(0、25、50、75....225)来进行翻页。我们可以使用循环来进行翻页爬取,保存。因为我们仅需要爬取电影的名称,所以我们要在页面中查找电影名对应的位置:

我们需要对爬取页面信息要进行处理,所以我们需要bs4的包,和之前一样下载。然后使用bs4的

BeautifulSoup进行解析html的内容。电影的名字在'span',"class": "title"的位置。所以代码如下:
import requests
from bs4 import BeautifulSoup
#定制请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"
}
#建立文件  你可以把路径改成你自己的
f = open("D:/Python学习/爬虫/douban.txt","w",encoding="UTF-8")
#因为豆瓣top250是分为页面的   每个页面只有部分电影,使用循环
for start_num in range(0,250,25):
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")  # 解析html内容
    """分析你所要提取信息的特点"""
    all_titles = soup.find_all("span", attrs={"class": "title"})
    for title in all_titles:
        title_string = title.string
        if "/" not in title_string:
            f.write(f"{title_string}/n")
            print(title_string)

结果如上。

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值