132 scrapy框架的认识, 移动端数据爬取, 多线程

主要内容:html

spider: 写的特别好https://www.cnblogs.com/x-pyue/p/7795315.htmlpython

1 多线程数据爬取web

import requests
from lxml import etree 
import random
import re
from multiprocessing.dummy import Pool
pool = Pool(5)

def saveVideo(data):
    file_path = str(random.randint(0,1000)) + ".mp4"
    with open(file_path, "wb") as f:
        f.write(data)
        print(file_path+"下载成功")
    
headers = {
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
    
}
url = 'https://www.pearvideo.com/'
page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath("//div[@class='vervideo-tlist-bd clearfix']/ul/li")
video_url_list = []
for li in li_list:
    detail_url = "https://www.pearvideo.com/" + li.xpath(".//a/@href")[0]
    detail_name = li.xpath(".//a//div[@class='vervideo-name']/text()")[0]
    detail_text = requests.get(url = detail_url, headers=headers).text
    open_addr = re.findall('srcUrl="(.*?)"',detail_text, re.S )[0]
    video_url_list.append(open_addr)
    
#并发下载视频
downloadVideo = lambda link:requests.get(url=link,headers=headers).content
#map返回的列表中存储的就是下载完毕的视频二进制的数据值
video_data_list = pool.map(downloadVideo,video_url_list)

pool.map(saveVideo,video_data_list)

pool.close()
pool.join()  
    
View Code

2  seleniumchrome

  a selenium的认识数据库

selenium介绍:是用来加载页面中动态的数据
    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像咱们玩游戏用的按键精灵,
    能够按指定的命令自动化操做,不一样是Selenium能够直接运行在浏览器上,它支持全部主流的浏览器(包括PhantomJS这些无界面的浏览器)。Selenium能够根据咱们的指令,让浏览器自动加载页面,获取须要的页面,甚至页面截屏,或者判断网站上某些动做是否发生。
    Selenium本身不带浏览器,不支持浏览器的功能,它须要与第三方浏览器结合在一块儿才能使用。可是咱们有时候须要让它内嵌在代码中运行,
全部咱们而已用一个叫PhantomJS的工具代替真实的浏览器。

  b  PhantomJS的简单介绍 浏览器

PhantomJS是一个基于Webkit的"无界面"(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScript,由于不会展现图形界面,因此运行起来比完整的浏览器更高效。
若是咱们把Selenium和PhantomJS结合在一块儿,就能够运行一个很是强大的网络爬虫了,这个爬虫能够处理JavaScript、Cookie、headers,以及任何咱们真实用户须要作的事情。

  c 爬虫实例网络

# 谷歌无头浏览器, 添加option参数也能够无界面.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
from time import sleep
bro = webdriver.Chrome(executable_path=r"C:\Users\26897\Desktop\爬虫\day 05 多线程 selenium\chromedriver.exe",chrome_options=chrome_options)
bro.get(url="https://www.baidu.com")
# 获取input框
my_input = bro.find_element_by_id("kw")
my_input.send_keys("阳光很好, 眼睛眯着")
button = bro.find_element_by_id("su")
button.click()
sleep(1)
#获取当前浏览器显示的页面的页面源码
page_text = bro.page_source
bro.quit()
View Code

     爬取豆瓣电影: 多线程

import requests
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path=r"C:\Users\26897\Desktop\爬虫\day 05 多线程 selenium\chromedriver.exe")

bro.get(url="https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action=")

js = 'window.scrollTo(0,document.body.scrollHeight)'
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)

page_text = bro.page_source
with open("./dianying.html", "w", encoding='utf-8') as f:
    f.write(page_text)
    
bro.quit()
View Code

 

    爬取qq空间:并发

# qq空间
import requests
from lxml import etree
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path=r"C:\Users\26897\Desktop\爬虫\day 05 多线程 selenium\chromedriver.exe")
bro.get(url="https://qzone.qq.com/")
# 定位到frame
bro.switch_to.frame("login_frame")
bro.find_element_by_id("switcher_plogin").click()
sleep(1)
u_input = bro.find_element_by_id('u')
p_input = bro.find_element_by_id('p')
u_input.send_keys("2689709108")
p_input.send_keys("gyh412724")
sleep(1)
button = bro.find_element_by_id('login_button')
button.click()
sleep(1)


js = 'window.scrollTo(0,document.body.scrollHeight)'
bro.execute_script(js)
sleep(1)
bro.execute_script(js)
sleep(1)

page_text = bro.page_source
sleep(5)
tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@class="f-info"]')
for div in div_list:
    print(div)
    title = div.xpath(".//text()")
#     print(title)
    title = ''.join(title)
bro.quit()
View Code

 

3 : 移动端数据爬取:https://www.cnblogs.com/bobo-zhang/p/10068994.htmlapp

4: scrapy框架初始

  0 scrapy的概念:

    scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,咱们只须要实现少许代码,就可以快速的抓取到数据内容。Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通信,能够加快咱们的下载速度,不用本身去实现异步框架,而且包含了各类中间件接口,能够灵活的完成各类需求。

  a 安装scrapy流程:

    1 下载: https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted, 在对应的路径中打开cmd, 而后安装, pip install 下载名

    2  安装pywin32,    pip install  pywin32

    3  安装scrapy        pip install  pywin32

  b 使用scrapy建立项目

    1 进入到指定的项目路径下, 安装scrapy, 而后建立项目, scrapy  startproject  项目名

    2 进入到项目中,  cmd  中直接cd  文件名

    3 建立爬虫文件, scrapy genspider 文件名  起始的url

    4  进入到pycharm中进行编辑

    5  在cmd中运行项目,   scrapy crawl 爬虫文件名    --nolog (无log文件)

  c  scrapy框架工做流程:

    1.首先Spiders(爬虫)将须要发送请求的url(requests)经ScrapyEngine(引擎)交给Scheduler(调度器)。

    2.Scheduler(排序,入队)处理后,经ScrapyEngine,DownloaderMiddlewares(可选,主要有User_Agent, Proxy代理)交给Downloader。

    3.Downloader向互联网发送请求,并接收下载响应(response)。将响应(response)经ScrapyEngine,SpiderMiddlewares(可选)交给Spiders。

    4.Spiders处理response,提取数据并将数据经ScrapyEngine交给ItemPipeline保存(能够是本地,能够是数据库)。

              5. 提取url从新经ScrapyEngine交给Scheduler进行下一个循环。直到无Url请求程序中止结束。

相关文章
相关标签/搜索