python scrapy selenium phantomJS爬取動(dòng)態(tài)網(wǎng)頁

之前用selenium和phantomJS單線程爬取tyc的對(duì)外投資信息浴骂,無奈爬取速度太慢,單個(gè)企業(yè)抓取速度大概在>30-60s,這還不是最關(guān)鍵的,最令人崩潰的是剛抓取一會(huì)就有bug郁妈,導(dǎo)致程序中斷,程序中斷的原因大概在爬取程序卡在某個(gè)部分不動(dòng)了认臊,經(jīng)檢查也沒發(fā)現(xiàn)bug在哪圃庭,所以爬蟲一直處于手動(dòng)爬蟲-手動(dòng)中斷-繼續(xù)爬蟲的狀態(tài)。今天學(xué)了scrapy失晴,果斷用scrapy+selenium+phantomJS來爬。
先上代碼

#coding:utf-8
from selenium.webdriver.common.keys import Keys  
import time
from selenium import webdriver
import requests
from bs4 import BeautifulSoup
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import pymongo
import xlrd
import time 

import scrapy
from tyc.items import TycItem
import logging
from scrapy.http import Request


class TycSpider(scrapy.Spider):
    name = 'tyc'
    allowed_domains = ['tianyancha.com']
    fname = "C:\\Users\\Administrator\\Desktop\\test.xlsx"
    workbook = xlrd.open_workbook(fname)
    sheet = workbook.sheet_by_name('Sheet1')
    urls = list()
    cols = sheet.col_values(0)
    #要爬取的url
    start_urls =['http://www.tianyancha.com/search?key={}&checkFrom=searchBox' .format(col) for col in cols]     

    def parse(self,response):
        #用phantomJs模擬瀏覽器拘央,添加headers
        dcap = dict(DesiredCapabilities.PHANTOMJS)
        dcap["phantomjs.page.settings.userAgent"] = (
            "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36"
        )
        browser = webdriver.PhantomJS(desired_capabilities=dcap)
        browser.get(response.url)
        time.sleep(4)
        #獲取企業(yè)url
        try:
            url = browser.find_element_by_class_name('query_name').get_attribute('href')
            browser.quit()
            self.logger.info('成功搜索到 %s',url)
            yield Request(url = url,callback = self.parse_detail)
            
        except Exception as e:
            self.logger.info('經(jīng)查詢沒有這個(gè)企業(yè)涂屁!')
    

    def parse_detail(self,response):
        #獲取企業(yè)對(duì)外投資情況
        dcap = dict(DesiredCapabilities.PHANTOMJS)
        dcap["phantomjs.page.settings.userAgent"] = (
            "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36"
        )
        browser = webdriver.PhantomJS(desired_capabilities=dcap)
     
        browser.get(response.url)
        self.logger.info('url %s', response.url)
        time.sleep(3)
        soup = BeautifulSoup(browser.page_source, 'lxml')
        # driver.implicitly_wait(10)
        browser.quit()
        item = TycItem()
        
        name = soup.select('.base-company')[0].text.split(' ')[0]
        self.logger.info('企業(yè)名 %s',name)
        try:
            inv = soup.select('#nav-main-outInvestment .m-plele')
            print (len(inv))
            for i in inv:
                inv = i.select('div')
                companyName = inv[0].text
                legalPerson = inv[2].text
                industry = inv[3].text
                state = inv[4].text
                invest = inv[5].text
                item['company'] = name
                item['enterprise_name'] = companyName
                item['legal_person_name'] = legalPerson
                item['industry'] = industry
                item['status'] = state
                item['reg_captial'] = invest
                
                yield (item)
        except Exception as e:
            self.logger.info('這個(gè)企業(yè)沒有對(duì)外投資!') 
有幾處需要注意:
  • 雖然用selenium模擬瀏覽器了灰伟,但是仍然要添加headers拆又,不添加headers儒旬,網(wǎng)頁的代碼還是不全。
  • 現(xiàn)在速度是有些提升了帖族,不過面對(duì)海量的數(shù)據(jù)栈源,還是要利用分布式爬蟲scrapy-redis或者scrapyd。
后續(xù)繼續(xù)學(xué)習(xí)scrapy分布式......
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竖般,一起剝皮案震驚了整個(gè)濱河市甚垦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涣雕,老刑警劉巖艰亮,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挣郭,居然都是意外死亡迄埃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門兑障,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侄非,“玉大人,你說我怎么就攤上這事流译〔士猓” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵先蒋,是天一觀的道長(zhǎng)骇钦。 經(jīng)常有香客問我,道長(zhǎng)竞漾,這世上最難降的妖魔是什么眯搭? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮业岁,結(jié)果婚禮上鳞仙,老公的妹妹穿的比我還像新娘。我一直安慰自己笔时,他們只是感情好棍好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著允耿,像睡著了一般借笙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上较锡,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天业稼,我揣著相機(jī)與錄音,去河邊找鬼蚂蕴。 笑死低散,一個(gè)胖子當(dāng)著我的面吹牛俯邓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熔号,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼稽鞭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了引镊?” 一聲冷哼從身側(cè)響起朦蕴,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祠乃,沒想到半個(gè)月后梦重,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亮瓷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年琴拧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘱支。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚓胸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出除师,到底是詐尸還是另有隱情沛膳,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布汛聚,位于F島的核電站锹安,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏倚舀。R本人自食惡果不足惜叹哭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望痕貌。 院中可真熱鬧风罩,春花似錦、人聲如沸舵稠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哺徊。三九已至室琢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唉工,已是汗流浹背研乒。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淋硝,地道東北人雹熬。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谣膳,于是被迫代替她去往敵國和親竿报。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容