开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6953|回复: 11
收起左侧

[源码分享] 利用urllib和xpath爬取电影播放地址

[复制链接]
结帖率:100% (4/4)
发表于 2019-3-7 00:42:26 | 显示全部楼层 |阅读模式   湖南省株洲市
好久没有写代码了,今天闲着就来写写这个。

若写的不好请大神指点,谢谢!

  1. from urllib import request
  2. from lxml import etree
  3. from pprint import pprint

  4. class GetMoviePlay:

  5.     """
  6.         # 取电影标题       '//*[@id="data_list"]/tr/td[1]/a'
  7.         # 取电影页面链接    '//*[@id="data_list"]/tr/td[1]/a/@href'
  8.         # 取电影类型       '//*[@id="data_list"]/tr/td[2]/a'
  9.         # 取电影地区       '//*[@id="data_list"]/tr/td[3]/p/font'
  10.         # 取连载状态       '//*[@id="data_list"]/tr/td[4]/span/font'
  11.         # 取更新时间       '//*[@id="data_list"]/tr/td[5]/font'
  12.         # 取当前页码详情    '/html/body/div[4]/div[1]/div/text()[1]'

  13.         # 获取真实链接 /html/body/div[4]/div[2]/div/div/ul/li[2]/text()
  14.     """

  15.     def __init__(self,page):
  16.         self.__url = 'http://yongjiuzy.cc/?m=vod-type-id-6-pg-%d.html' % page
  17.         self.__name = (
  18.             '//*[@id="data_list"]/tr/td[1]/a/text()',
  19.             '//*[@id="data_list"]/tr/td[1]/a/@href',
  20.             '//*[@id="data_list"]/tr/td[2]/a/text()',
  21.             '//*[@id="data_list"]/tr/td[3]/p/font/text()',
  22.             '//*[@id="data_list"]/tr/td[4]/span/font/text()',
  23.             '//*[@id="data_list"]/tr/td[5]/font/text()',
  24.             '/html/body/div[4]/div[1]/div/text()[1]',
  25.             '/html/body/div[4]/div[1]/div/div[2]/li[1]/text()[2]',
  26.             '/html/body/div[4]/div[2]/div/div/ul/li[2]/text()'
  27.         )

  28.     @property
  29.     def movie_info_dict(self):
  30.         res = request.Request(self.__url)
  31.         response = request.urlopen(res).read()
  32.         response = etree.HTML(response)
  33.         # 取电影标题
  34.         m_cont_list_tmp = response.xpath(self.__name[0])
  35.         m_cont_list = []

  36.         # 解析电影标题,只取奇数的主标题
  37.         for i in range(len(m_cont_list_tmp)):
  38.             if i % 2 == 0:
  39.                 m_cont_list.append(m_cont_list_tmp[i])

  40.         # 取电影页面链接
  41.         m_url_list = response.xpath(self.__name[1])

  42.         # 拼接url
  43.         for i in range(len(m_url_list)):
  44.             m_url_list[i] = 'http://yongjiuzy.cc/' + m_url_list[i]

  45.         # 取电影类型
  46.         m_type_list = response.xpath(self.__name[2])

  47.         # 取电影地区       '//*[@id="data_list"]/tr/td[3]/p/font'
  48.         m_city_list = response.xpath(self.__name[3])

  49.         # 取连载状态       '//*[@id="data_list"]/tr/td[4]/span/font'
  50.         m_state_list = response.xpath(self.__name[4])

  51.         # 取更新时间       '//*[@id="data_list"]/tr/td[5]/font'
  52.         m_time_list = response.xpath(self.__name[5])

  53.         # 取当前页码详情    '/html/body/div[4]/div[1]/div/text()[1]'
  54.         m_this_page = response.xpath(self.__name[6])

  55.         return {'context':m_cont_list,
  56.                 'url':m_url_list,
  57.                 'type':m_type_list,
  58.                 'city':m_city_list,
  59.                 'state':m_state_list,
  60.                 'time':m_time_list,
  61.                 'thisPage':m_this_page
  62.                 }



  63.     def getMovieTrue(self,url):
  64.         res = request.Request(url)
  65.         response = request.urlopen(res).read()
  66.         response = etree.HTML(response)

  67.         # 电影名称      /html/body/div[4]/div[1]/div/div[2]/li[1]/text()[2]
  68.         m_true_context = response.xpath(self.__name[7])

  69.         # 获取真实链接 /html/body/div[4]/div[2]/div/div/ul/li[2]/text()
  70.         m_true_url = response.xpath(self.__name[8])

  71.         # 返回列表数据
  72.         return [m_true_context[0],m_true_url[0]]


  73. if __name__ == '__main__':

  74.     a = GetMoviePlay(1)   # 初始化一个页码

  75.     # 返回了一堆数据,其实我就只要了url
  76.     url = a.movie_info_dict['url']

  77.     for i in range(len(url)):
  78.         info = a.getMovieTrue(url[i])
  79.         pprint(info)



复制代码




QQ截图20190307003752.png

评分

参与人数 1好评 +1 精币 +1 收起 理由
AdGame + 1 + 1 支持开源~!感谢分享

查看全部评分

结帖率:0% (0/1)

签到天数: 13 天

发表于 2022-3-1 10:42:40 | 显示全部楼层   江苏省常州市
学习中,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2019-3-20 17:54:57 | 显示全部楼层   山东省威海市
你太油菜了,不扶墙就扶你!
回复 支持 反对

使用道具 举报

发表于 2019-3-20 17:54:15 | 显示全部楼层   山东省威海市
感谢分享,论坛有您更精彩!
回复 支持 反对

使用道具 举报

发表于 2019-3-20 17:43:11 | 显示全部楼层   山东省威海市
真有创意,谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2019-3-20 17:36:53 | 显示全部楼层   山东省威海市
真有创意,谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2019-3-20 16:46:17 | 显示全部楼层   山东省威海市
鐪熸湁鍒涙剰锛岃阿璋㈠垎浜
回复 支持 反对

使用道具 举报

发表于 2019-3-20 16:45:04 | 显示全部楼层   山东省威海市
鐪熸湁鍒涙剰锛岃阿璋㈠垎浜
回复 支持 反对

使用道具 举报

发表于 2019-3-20 16:43:21 | 显示全部楼层   山东省威海市
鐪熸湁鍒涙剰锛岃阿璋㈠垎浜
回复 支持 反对

使用道具 举报

发表于 2019-3-20 16:42:23 | 显示全部楼层   山东省威海市
%09%B8%*FBD%F4%CA%D5%B2%D8%C6%F0%C0%B4%A3%AC%D0%BB%D0%BB%3F%3F%3F
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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