鱼C论坛

 找回密码
 立即注册
查看: 3643|回复: 5

[作品展示] python爬取某电影网站,获取其磁力链接

[复制链接]
发表于 2019-8-16 17:03:16 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 bigplumtree 于 2019-8-16 17:06 编辑

跟着小甲鱼学习1个月,最后写了个爬虫
并且运行成功! ,非常高兴

代码返回的结果是类似这样的
  1. 黑衣人:全球追缉    HD1280高清国语|原声中字版    https://www.80s.la/movie/26330    thunder://QUFodHRwOi8vYW5uaW5nLmx1YW5uaWFvLXp1aWRhLmNvbS8xOTA3L0hZ5Lq677yaUVHov73nvIkuSEQxMjgw6auY5riF5Lit5a2X6Z+p54mILm1wNFpa
  2. 大清十二刑    HD1280高清国语中字版    https://www.80s.la/movie/27920    磁力链接暂时没有
  3. 博多之子    HD1280高清中英双字版    https://www.80s.la/movie/27902    thunder://QUFodHRwOi8veHVubGVpLnhpYXphaS16dWlkYS5jb20vMTkwOC/ljZrlpJrkuYvlrZAuSEQxMjgw6auY5riF5Lit6Iux5Y+M5a2X54mILm1wNFpa
复制代码



                               
登录/注册后可看大图

以下为代码
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import time

  4. '''爬取的网站是80s电影网,可以打开这个网站看下的他的结构'''

  5. # 这三个url是电影栏目的url,
  6. # 为了以后能在其他栏目下爬取,
  7. # 所以给他拆开了
  8. url_before = 'https://www.80s.la'
  9. url_type = '/movie'
  10. url_after = '/list/-----p'
  11. # 只做了浏览器头的伪装,没有使用代理
  12. header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}


  13. # 获取电影栏目下,每页的所有电影名称,清晰度和电影详细页地址
  14. # 传入的值为电影栏目下,每一页的url
  15. # 以字典的形式返回{'电影名称':['清晰度','详细页']}
  16. def get_movie_list(moive_list_url):

  17.     # 定义这个函数返回的字典
  18.     movie_dict = {}

  19.     # 请求这个网址,并使用BeautifulSoup解析
  20.     req = requests.get(moive_list_url,headers=header)
  21.     html = req.text
  22.     html_bs = BeautifulSoup(html,'lxml')

  23.     # 这个url,每页展示的所有电影都在ul标签下
  24.     # 限定的条件可以使用浏览器找出来
  25.     # 返回内容是li标签的大集合
  26.     # 每页都会有5*5=25个电影,也就是25个li标签
  27.     label_li = html_bs.find('ul',class_="me1 clearfix")
  28.     # 根据li标签的大集合,找出每个li标签,以列表形式返回
  29.     movie_list = label_li.find_all('li')

  30.     # 遍历每个li标签,提取出需要的内容,可以用浏览器看下li标签的结构
  31.     for per_li in movie_list:
  32.         type = per_li.find_all('span')[1].string.strip()
  33.         url = url_before + per_li.a.attrs['href']
  34.         name = per_li.a.attrs['title']
  35.         # 将组合的内容存入字典中
  36.         movie_dict[name] = [type, url]

  37.     return movie_dict

  38. # 获取电影详细页面内的迅雷磁力链
  39. # 传入每一个详细页的url
  40. # 返回该页面内电影的磁力链
  41. def get_movie_info(movie_info_url):

  42.     # 请求详细页,并使用BeautifulSoup解析
  43.     req = requests.get(movie_info_url,headers=header)
  44.     html = req.text
  45.     html_bs = BeautifulSoup(html,'lxml')

  46.     # 获取详细页面内的磁力链,可以打开浏览器查看,磁力链的位置,找到这个标签
  47.     xunlei = html_bs.find('a', onclick="return OnDownloadClick_Simple(this,2,4)")
  48.     # 有的电影没有下载资源,上面会返回None,这里做个判断
  49.     # 有磁力链的话就返回磁力链,没有就返回自定义字符串
  50.     if xunlei == None:
  51.         cili = '磁力链接暂时没有'
  52.     else:
  53.         cili = xunlei.attrs['href']

  54.     return cili


  55. print('--------------准备获取网站信息--------------')

  56. # 这里是准备爬取的页面,可以打开电影栏目页面,看下一共有多少页
  57. for page in range(5,10):

  58.     # 组装url
  59.     url = url_before + url_type + url_after + str(page)
  60.     print('正在获取  ' + url + '  页面信息,请稍后....')

  61.     # 获取该页面下所有的电影资源,字典类型
  62.     # {'电影名称':['清晰度','详细页']}
  63.     movie_list_per_page = get_movie_list(url)

  64.     # 获取该页面下所有的电影名称,也就是字典的键
  65.     allmovie_names = movie_list_per_page.keys()

  66.     # 打开文件,用来存这些爬到的内容
  67.     # 在这里做打开,而不在写入文件的时候做,
  68.     # 我的想法是,下面是一个循环,每循环一次就打开关闭一次,太浪费资源
  69.     # 不知道我的想法对不对
  70.     with open('E:\\80s1.txt','a+') as file:

  71.         # 遍历电影名称
  72.         for movie_name in allmovie_names:
  73.             # 以电影名称获取电影类型
  74.             movie_type = movie_list_per_page[movie_name][0]
  75.             # 以电影名称获取电影详细页url
  76.             movie_url = movie_list_per_page[movie_name][1]

  77.             # 传入电影详细页url获取磁力链
  78.             cili = get_movie_info(movie_url)

  79.             # 组装要写入文件的信息
  80.             text = movie_name + '    ' + movie_type + '    ' + movie_url + '    ' + cili + '\n'

  81.             # 写入文件,每次写入都直接写入,不放在缓冲区
  82.             file.write(text)
  83.             file.flush()
  84.             print(movie_name+'写入完成')

  85.             # 以防打开网页的速度太快,被服务器封掉ip
  86.             # 所以每完成一次就,休息2秒
  87.             time.sleep(2)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-19 10:07:28 | 显示全部楼层
手动挽尊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-3 21:25:09 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-27 15:49:15 | 显示全部楼层
SSLError: HTTPSConnectionPool(host='www.80s.la', port=443): Max retries exceeded with url: /movie/list/-----p5 (Caused by SSLError(SSLCertVerificationError("hostname 'www.80s.la' doesn't match 'www.zimuku.cn'")))
运行错误,怎么回事
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-1 11:46:08 | 显示全部楼层
学习了,谢谢分享。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-1 20:24:08 | 显示全部楼层
有多少人试过了 ,刚才看网站都打不开了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 12:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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