python多进程爬取某酷视频推荐影视名称
爬取内容
1.下图是某酷的影视板块:
2.爬取这些板块的每日推荐,以“剧集”板块举例,该板块爬取信息为:都挺好,东宫,乡村爱情…:
主要用到的模块
- request(抓取网页源代码)
- 用xpath解析(lxml库)
- multiprocessing(采用多进程,充分利用cpu,提升爬取效率)
爬取思路
- 爬取某酷首页网页源代码,找到“影视板块”对应的url,储存在list_url列表中;
- 定一个函数main_0,输入一个url,获得该板块每日推荐影视名称。
遇到的问题
- 在获取“影视板块”的url的时候,有一个板块的url没有“http:”,需要对爬取的url进行加工处理;
- 以“剧集”板块举例,有两个地方都出现了“都很好”这个内容,我没有解析出“h2”标签下的那个,所以就解析了“a”标签下的,所以导入了json包,把json数据转化字典。
代码
#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")
结束语
第一次自己用多进程爬取数据,如有不足,欢迎大家与我一起讨论!