主要內容: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()
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()
爬取豆瓣電影: 多線程
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()
爬取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()
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請求程序中止結束。