鱼C论坛

 找回密码
 立即注册
查看: 1236|回复: 12

[已解决]豆瓣电影

[复制链接]
发表于 2020-6-12 13:52:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jump_p 于 2020-6-12 13:53 编辑

1591940854(1).jpg

访问豆瓣美剧的页面,这个页面只显示20部美剧,需要下拉才能下载,也就是说是被JS渲染的。

640.png

F12右键检查,找到Network,左边菜单Name , 找到第五个数据,点击Preview。

1591940998(1).jpg
点开subjects,可以看到 title 就是对应电影名称。rate就是对应评分。通过js解析subjects字典,找到需要的字段。

那么如何找到每部电影的链接呢?我看到的文章链接如下: 不懂这个链接在哪里看到的

1591941123(1).jpg
最佳答案
2020-6-12 16:26:06
本帖最后由 Twilight6 于 2020-6-12 16:30 编辑

[b]
jump_p 发表于 2020-6-12 15:24
这是完整代码,帮忙品品


在这找的,而且你多翻几页就会找到规律,每页都是  age*20 的形式   

第一页是 0*20 第二页 1*20  第三页 2*20  所以那用 {} 格式化代入乘以20后的数即可模仿翻页

第二页:
GIF.gif




第三页:
213.png
[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-12 14:40:24 | 显示全部楼层
本帖最后由 叱咤风云2333 于 2020-6-12 14:43 编辑

应该是网页自己地址栏里的url,这里应该不是每部电影的URL,是美剧主页的URL。limit=20和你每页显示20个对得上。
我从豆瓣电影主页,点击美剧栏目,进去的显示地址复制过来如下:https://movie.douban.com/tv/#!type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0
因为解码问题,地址栏里的“美剧”两个字复制过来后显示的是乱码。这样应该跟你看到文章里的是一样的。
Image 2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 14:52:46 | 显示全部楼层
叱咤风云2333 发表于 2020-6-12 14:40
应该是网页自己地址栏里的url,这里应该不是每部电影的URL,是美剧主页的URL。limit=20和你每页显示20个对 ...

直接复制这个地址是爬不到东西的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 14:59:54 | 显示全部楼层
本帖最后由 叱咤风云2333 于 2020-6-12 15:04 编辑
jump_p 发表于 2020-6-12 14:52
直接复制这个地址是爬不到东西的

  1. import urllib.request

  2. url = 'https://movie.douban.com/tv/#!type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0'
  3. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
  4. req = urllib.request.Request(url = url,headers = headers)
  5. response = urllib.request.urlopen(req)
  6. print(response.read().decode('utf-8'))
复制代码


用上面代码把刚才这个网页爬出来了。
不过刚才爬出来的确实没有具体信息,猜测可能要通过树的形式,得点进去才能找到?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 15:06:37 | 显示全部楼层
叱咤风云2333 发表于 2020-6-12 14:59
用上面代码把刚才这个网页爬出来了。
不过刚才爬出来的确实没有具体信息,猜测可能要通过树的形式 ...

可能是加密的接口?我也不是很懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 15:12:10 | 显示全部楼层
4楼的代码是对的,一般下拉都是ajax,header里最好加上:X-Requested-With: XMLHttpRequest
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 15:24:21 | 显示全部楼层
本帖最后由 jump_p 于 2020-6-12 15:25 编辑
suchocolate 发表于 2020-6-12 15:12
4楼的代码是对的,一般下拉都是ajax,header里最好加上:X-Requested-With: XMLHttpRequest

  1. import requests, json
  2. from fake_useragent import UserAgent
  3. import csv


  4. class Doban(object):
  5.     u = 0;

  6.     def __init__(self):
  7.         self.film_list = []
  8.         ua = UserAgent(verify_ssl=False)
  9.         self.url = "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"
  10.         for i in range(1, 50):
  11.             self.headers = {
  12.                 'User-Agent': ua.random # ua 构造随机请求头
  13.             }

  14.     '''发送请求  获取响应'''

  15.     def get_page(self, url):
  16.         res = requests.get(url=url, headers=self.headers)
  17.         html = res.content.decode("utf-8")
  18.         if res.status_code == 200:
  19.             return html
  20.         '''解析数据'''

  21.     #
  22.     # '''获取链接函数'''
  23.     def parse_page(self, html):
  24.         # 创建csv文件进行写入
  25.         csv_file = open('scr.csv', 'a', encoding='gbk')
  26.         csv_writer = csv.writer(csv_file)
  27.         # 写入csv标题头内容
  28.         csv_writer.writerow(['电影', '评分', "详情页"])
  29.         data = json.loads(html)['subjects']
  30.         # print(data[0])
  31.         for r in data:
  32.             # print(r)
  33.             rate = r["rate"]
  34.             id = r["title"]
  35.             src = r["url"]
  36.             urll = r["cover"]
  37.             csv_writer.writerow([id, rate, urll])
  38.             html2 = requests.get(url=urll, headers=self.headers).content
  39.             dirname = "./图/" + id + ".jpg"
  40.             with open(dirname, 'wb') as f:
  41.                 f.write(html2)
  42.                 print("%s 【下载成功!!!!】" % id)

  43.         csv_file.close()

  44.     def main(self):
  45.         startPage = int(input("起始页:"))
  46.         endPage = int(input("终止页:"))
  47.         for page in range(startPage, endPage + 1, 20):
  48.             url = self.url.format(page)
  49.             # print(url)
  50.             html = self.get_page(url)
  51.             self.u += 1
  52.             self.parse_page(html)
  53.             print("======================第%s页爬取成功!!!!=======================" % str(self.u))


  54. if __name__ == '__main__':
  55.     Siper = Doban()
  56.     Siper.main()

复制代码


这是完整代码,帮忙品品
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 16:26:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-12 16:30 编辑

[b]
jump_p 发表于 2020-6-12 15:24
这是完整代码,帮忙品品


在这找的,而且你多翻几页就会找到规律,每页都是  age*20 的形式   

第一页是 0*20 第二页 1*20  第三页 2*20  所以那用 {} 格式化代入乘以20后的数即可模仿翻页

第二页:
GIF.gif




第三页:
213.png
[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 16:34:39 | 显示全部楼层
  1. {rate: "8.8", cover_x: 2025, title: "韦恩", url: "https://movie.douban.com/subject/30204361/",…}
  2. cover: "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2545419100.jpg"
  3. cover_x: 2025
  4. cover_y: 3000
  5. id: "30204361"
  6. is_new: false
  7. playable: false
  8. rate: "8.8"
  9. title: "韦恩"
  10. url: "https://movie.douban.com/subject/30204361/"
复制代码


返回的ajax里面,所有信息都包括了,链接什么的都有,直接提取
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 17:07:54 | 显示全部楼层
Stubborn 发表于 2020-6-12 16:34
返回的ajax里面,所有信息都包括了,链接什么的都有,直接提取

你这个似乎还不是,楼上那个是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-12 17:08:31 | 显示全部楼层
Twilight6 发表于 2020-6-12 16:26
在这找的,而且你多翻几页就会找到规律,每页都是  age*20 的形式   

第一页是 0*20 第二页 1*20   ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 17:43:14 | 显示全部楼层
jump_p 发表于 2020-6-12 17:07
你这个似乎还不是,楼上那个是

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-12 18:35:23 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表