Python爬取豆瓣电影数据返回[],没有数据
# 需求:获取豆瓣电影类型分类下的电影列表
import requests
import json
if __name__ == "__main__":
# UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'
}
# 1.指定url
url = 'https://movie.douban.com/j/chart/top_list' # ?type=24&interval_id=100:90&action=&start=60&limit=20
# 2.封装url问号后面的参数
param = {
'type': '24',
'interval_id': '100: 90',
'action': '',
'start': '20', # 表示从第几部电影开始取
'limit': '20', # 表示一次请求取的个数
}
# 3.发起get请求
response = requests.get(url=url, params=param, headers=headers)
list_data = response.json()
print(list_data)
# 4.进行持久化存储(注意导入json模块)
fileName = './douban.json'
fp = open(fileName, 'w', encoding='utf-8')
json.dump(list_data, fp=fp, ensure_ascii=False)
print('豆瓣爬取结束!!')
[]
豆瓣爬取结束!!
请看看,谢谢!!
找到问题了 interval_id 后面100:90冒号后多了一个空格
requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等。其中返回的网页部分会存.text对象中。
Python json 模块
json.dumps将python对象格式化成json字符(将dict转化成str)
json.loads将json字符串解码成python对象(将str转化成dict)
import requests
import json
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'
}
url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100:90&action=&start=60&limit=1'
re = requests.get(url=url, headers=headers)
r = re.text
data = json.loads(r)
print(data)
url = 'https://movie.douban.com/j/chart/top_list' # ?type=24&interval_id=100:90&action=&start=60&limit=20
地址里有#,后半部分变成了注释,改成下面的
url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100:90&action=&start=60&limit=20