使用selenium 多线程爬取爱奇艺电影信息

转载请注明出处。

爬取目标:每个电影的评分、名称、时长、主演、和类型

爬取思路:

源文件:(有注释)

from selenium import webdriver

from threading import Thread
import threading
import time
import openpyxl #操作excel #爱奇艺的看电影的url 不是首页。
url='http://list.iqiyi.com/www/1/-8------------11-1-1-iqiyi--.html' #自定义一个线程类 实现多线程爬取
class M_Thread(Thread):
def __init__(self,name1,url):
Thread.__init__(self)
self.url=url
self.name1=name1
def run(self):
self.kind_movie=page(self.name1,self.url)
#page运行完后lock进行 让 当前movie 结束 # 初始化爬虫,从url中爬爬取各个种类相对于的连接。
def init():
# 浏览器 无界面 和有界面。
fireFoxOptions = webdriver.FirefoxOptions()
fireFoxOptions.set_headless()
Brower = webdriver.Firefox(firefox_options=fireFoxOptions)
# Brower = webdriver.Firefox()
Brower.get(url)
#定位到种类标签 (发现不用Xpath容易出错)
kind=Brower.find_element_by_xpath("/html/body/div[3]/div/div/div[1]/div[4]/ul")
#a标签就是那个 连接
kinds=kind.find_elements_by_tag_name("a") #将每个类型的页面连接储存到kinds_dict中
movie_kind_link={}
for a in kinds:
try:
if(a.text=="全部" or a.text==""): #去掉 全部类型 和一个空类型。
continue
movie_kind_link[a.text] = a.get_attribute("href")
except:
print("error!")
continue
Brower.close()
return movie_kind_link #返回的是 种类:url 字典。 def page(name,link):
#每一个种类 都打开一个excle储存
wordbook=openpyxl.Workbook()
sheet1=wordbook.active
num=1
#初始化excle第一行
for qwe in ["电影名","时长","评分","类型","演员"]:
sheet1.cell(row=1,column=num,value=qwe)
num+=1
num=2
#本来一开始是用txt写的但是布局太丑。 优点是速度快!
# 采用过 用数据库存 ,但是同时写入大量数据 总是会出莫名奇妙的错误。暂时没解决
# file=open(name+".txt","w",encoding="utf-8")
fireFoxOptions = webdriver.FirefoxOptions()
fireFoxOptions.set_headless()
Br = webdriver.Firefox(firefox_options=fireFoxOptions)
# Br = webdriver.Firefox()
# try:
Br.get(link)
print("正在打开 %s 页面"%name)
page = Br.find_element_by_class_name("mod-page")
page_href=[]
for aa in page.find_elements_by_tag_name("a"):
page_href.append(aa.get_attribute("href"))
for cc in page_href:
print("*****正在爬取 {} 的第 {} 页*****".format(name,page_href.index(cc)+1))
# time.sleep(1)
# 第一页不用重新打开
if(page_href.index(cc)!=0):
Br.get(cc)
#movie 即当前页面的 电影tag 列表
movie=Br.find_element_by_class_name("wrapper-piclist").find_elements_by_tag_name("li")
for bb in movie:
# try:
things=bb.text.split("\n")
"""
这里为什么要区分?
爱奇艺很垃圾,有点电影评分不给,
但是在直接获取text在if判断和分元素去获取四个属性,我觉得还是if好用。
"""
if(len(things)==4):
sheet1.cell(row=num, column=1, value=things[2])
sheet1.cell(row=num, column=2, value=things[0])
sheet1.cell(row=num, column=3, value=things[1])
sheet1.cell(row=num, column=4, value=name)
sheet1.cell(row=num, column=5, value=things[3])
num+=1 elif (len(things) == 3):
sheet1.cell(row=num, column=1, value=things[1])
sheet1.cell(row=num, column=2, value="*")
sheet1.cell(row=num, column=3, value=things[0])
sheet1.cell(row=num, column=4, value=name)
sheet1.cell(row=num, column=5, value=things[2])
num +=1
else:
print("error (moive)")
# break
Lock_thread.release() # 解锁
wordbook.save(name+".xlsx")
Br.close() if __name__=="__main__":
#控制线程最大数量为3
Lock_thread= threading.Semaphore(3) #控制线程数为3
#kind:link
dict=init()
# print(dict)
#多线程爬取
for name1,link in dict.items():
Lock_thread.acquire() #枷锁 ,在每一个page()运行完后解锁
thread_live=M_Thread(name1,link)
print(name1," begin")
thread_live.start()
time.sleep(3)

使用selenium 多线程爬取爱奇艺电影信息的更多相关文章

  1. Python爬取爱奇艺资源

    像iqiyi这种视频网站,现在下载视频都需要下载相应的客户端.那么如何不用下载客户端,直接下载非vip视频? 选择你想要爬取的内容 该安装的程序以及运行环境都配置好 下面这段代码就是我在爱奇艺里搜素“ ...

  2. 如何利用python爬虫爬取爱奇艺VIP电影?

    环境:windows    python3.7 思路: 1.先选取你要爬取的电影 2.用vip解析工具解析,获取地址 3.写好脚本,下载片断 4.将片断利用电脑合成 需要的python模块: ##第一 ...

  3. Python爬虫实战案例:爬取爱奇艺VIP视频

    一.实战背景 爱奇艺的VIP视频只有会员能看,普通用户只能看前6分钟.比如加勒比海盗5的URL:http://www.iqiyi.com/v_19rr7qhfg0.html#vfrm=19-9-0-1 ...

  4. Python 爬虫实例(5)—— 爬取爱奇艺视频电视剧的链接(2017-06-30 10:37)

    1. 我们找到  爱奇艺电视剧的链接地址 http://list.iqiyi.com/www/2/-------------11-1-1-iqiyi--.html 我们点击翻页发现爱奇艺的链接是这样的 ...

  5. Python爬取爱奇艺【老子传奇】评论数据

    # -*- coding: utf-8 -*- import requests import os import csv import time import random base_url = 'h ...

  6. 爬取爱奇艺电视剧url

    ----因为需要顺序,所有就用串行了---- import requests from requests.exceptions import RequestException import re im ...

  7. 使用Beautiful Soup爬取猫眼TOP100的电影信息

    使用Beautiful Soup爬取猫眼TOP100的电影信息,将排名.图片.电影名称.演员.时间.评分等信息,提取的结果以文件形式保存下来. import time import json impo ...

  8. casperjs 抓取爱奇艺高清视频

    CasperJS 是一个开源的导航脚本和测试工具,使用 JavaScript 基于 PhantomJS 编写,用于测试 Web 应用功能,Phantom JS是一个服务器端的 JavaScript A ...

  9. 爬取迷你mp4各个电影信息

    网站:www.minimp4.com # coding=utf-8 import requests from lxml import etree class Minimpe_moves(object) ...

随机推荐

  1. [转帖]linux操作系统测试工具

    linux操作系统测试工具 http://cfdtesting.com/879156.html 作者: minions_222      来源: CFDTesting.com采编      发布于:  ...

  2. [Visual Studio] - Unable to launch the IIS Express Web server 问题之解决

    背景 Visual Studio 2015 在 Debug 模式下调试失败. 错误 解决 删除解决方案下 .vs/config 文件夹,重新运行解决方案可进行调试. 参考资料 https://stac ...

  3. ServiceStack.Redis 连接有密码的Redis问题解决

    在ip:port前面加上@用来表示密码,比如password@ip:port <add key="RedisServer" value="123456@127.0. ...

  4. 分布式自增ID算法snowflake

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的,作为索引非常不好,严重影响性能. ...

  5. 利用Python进行数据分析 第8章 数据规整:聚合、合并和重塑.md

    学习时间:2019/11/03 周日晚上23点半开始,计划1110学完 学习目标:Page218-249,共32页:目标6天学完(按每页20min.每天1小时/每天3页,需10天) 实际反馈:实际XX ...

  6. 20191106-基于Python的对字母基数排序

    基数排序 概念 基数排序的算法过程是先将待排元素补位,使其长度一致,然后按照序列中的元素的每个位数进行分桶的一种算法. 比如待排序列是数字,则将所有待比较数值(正整数)统一为同样的数位长度,数位较短的 ...

  7. MacBook Pro 安装composer及Yii2.0

    最近想看看Yii的一些东西,需要安装一下composer curl -sS https://getcomposer.org/installer | php 此操作会下载最新版本到当前的目录下 然后将下 ...

  8. idea for mac 快捷键整理

    ⌘O 查找类文件 ⌘⌥O 前往指定的变量 / 方法 ⌘⇧O 查找所有类型文件.打开文件.打开目录,打开目录需要在输入的内容前面或后面加一个反斜杠/ ⌘⌥← / ⌘⌥→ 退回 / 前进到上一个操作的地方 ...

  9. 在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数)

    原文:在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数.存储过程内的参数) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的 ...

  10. VS.NET(C#)--2.8_CCS样式

    CSS样式 文件命名 StyleSheet.css     body { font-size:12px } .button     { color:Red; text-decoration:none; ...