python多进程爬取某酷视频推荐影视名称

爬取内容

1.下图是某酷的影视板块:python多进程爬取某酷视频推荐影视名称
2.爬取这些板块的每日推荐,以“剧集”板块举例,该板块爬取信息为:都挺好,东宫,乡村爱情…:
python多进程爬取某酷视频推荐影视名称

主要用到的模块

  1. request(抓取网页源代码)
  2. 用xpath解析(lxml库)
  3. multiprocessing(采用多进程,充分利用cpu,提升爬取效率)

爬取思路

  1. 爬取某酷首页网页源代码,找到“影视板块”对应的url,储存在list_url列表中;
  2. 定一个函数main_0,输入一个url,获得该板块每日推荐影视名称。

遇到的问题

  1. 在获取“影视板块”的url的时候,有一个板块的url没有“http:”,需要对爬取的url进行加工处理;
  2. 以“剧集”板块举例,有两个地方都出现了“都很好”这个内容,我没有解析出“h2”标签下的那个,所以就解析了“a”标签下的,所以导入了json包,把json数据转化字典。
    python多进程爬取某酷视频推荐影视名称

代码

#encoding=utf-8
from lxml import etree
import sys
import requests
import json
from multiprocessing import Pool
reload(sys)
sys.setdefaultencoding='utf-8'
url="https://www.youku.com/"
response=requests.get(url)
pageContent=response.text
html=etree.HTML(pageContent)
list_url=html.xpath("//span[@class='channel']/a/@href")
list_name=html.xpath("//span[@class='channel']/a/node()")

for i in range(len(list_url)):
    if list_url[i][0:1]=='h':
        continue
    else:
        list_url[i]="http:"+list_url[i]
    #print list_name[i],list_url[i]

def main_0(url):
    response = requests.get(url)
    pageContent = response.text
    #print pageContent
    html = etree.HTML(pageContent)
    list_name_name=html.xpath("//a[@class='swiper-slide']/@data-trackinfo")
    for pre_json in list_name_name:
        dict0 = json.loads(pre_json)
        print dict0['object_title']

if __name__ == '__main__':
   pool = Pool(processes=4) #建立进程池
   for i in range(len(list_url)):
       pool.apply_async(main_0, (list_url[i],))
   pool.close()
   pool.join()
   print("OK")

结束语

第一次自己用多进程爬取数据,如有不足,欢迎大家与我一起讨论!