精易论坛

标题: 利用urllib和xpath爬取电影播放地址 [打印本页]

作者: 艾鱼    时间: 2019-3-7 00:42
标题: 利用urllib和xpath爬取电影播放地址
好久没有写代码了,今天闲着就来写写这个。

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

  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 (145.29 KB, 下载次数: 0)

QQ截图20190307003752.png

作者: g5g5    时间: 2019-3-7 08:57
看看!!!!!!!!!!!!!
作者: qw57681    时间: 2019-3-7 09:28
我觉得re更好一点
作者: wqy88    时间: 2019-3-20 16:42
%09%B8%*FBD%F4%CA%D5%B2%D8%C6%F0%C0%B4%A3%AC%D0%BB%D0%BB%3F%3F%3F
作者: wqy88    时间: 2019-3-20 16:43
鐪熸湁鍒涙剰锛岃阿璋㈠垎浜
作者: wqy88    时间: 2019-3-20 16:45
鐪熸湁鍒涙剰锛岃阿璋㈠垎浜
作者: wqy88    时间: 2019-3-20 16:46
鐪熸湁鍒涙剰锛岃阿璋㈠垎浜
作者: wqy88    时间: 2019-3-20 17:36
真有创意,谢谢分享。
作者: wqy88    时间: 2019-3-20 17:43
真有创意,谢谢分享。
作者: wqy88    时间: 2019-3-20 17:54
感谢分享,论坛有您更精彩!
作者: wqy88    时间: 2019-3-20 17:54
你太油菜了,不扶墙就扶你!
作者: ferrisy    时间: 2022-3-1 10:42
学习中,谢谢分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4