第八天,scrapy的幾個小技巧


 

一. 微博模擬登陸
1. 百度搜微博開放平台可滿足爬取量不大的情況
2. 微博模擬登陸和下拉鼠標應對ajax加載
from selenium import webdriver import time browser = webdriver.Chrome() browser.get('https://www.weibo.com') time.sleep(10) browser.find_element_by_css_selector("#loginname").send_keys("13880576568") browser.find_element_by_css_selector(".info_list.password input[node-type='password']").send_keys("shiyan823") browser.find_element_by_css_selector(".info_list.login_btn a[node-type='submitBtn']").click() # 鼠標下拉
for i in range(3): browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(3)

 

 
 
 
 
二. chromedriver不加載圖片
from selenium import webdriver chrome_opt = webdriver.ChromeOptions() prefs = {"profile.managed_default_content_settings.images": 2} chrome_opt.add_experimental_option("prefs", prefs) browser = webdriver.Chrome(chrome_options=chrome_opt) browser.get("https://www.taobao.com")

 

 
 
 
三. 把selenium集成到scrapy中
以伯樂在線為例子
1. jobbole.py->JobboleSpider類中添加如下代碼,引入了信號量
from scrapy.xlib.pydispatch import dispatcher from scrapy import signals from selenium import webdriver def __init__(self): self.browser = webdriver.Chrome() super().__init__() dispatcher.connect(self.spider_closed, signals.spider_closed) def spider_closed(self, spider): #當爬蟲退出的時候關閉chrome
    print ("spider closed") self.browser.quit()

 

 
2. middleware.py中添加
 
from selenium import webdriver from scrapy.http import HtmlResponse class JSPageMiddleware(object): #通過chrome請求動態網頁
    def process_request(self, request, spider): if spider.name == "jobbole": # browser = webdriver.Chrome()
 spider.browser.get(request.url) import time time.sleep(3) print ("訪問:{0}".format(request.url)) return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)

 

 
 
3. 修改settings.py中的DOWNLOADER_MIDDLEWARES
'Article.middlewares.JSPageMiddleware': 1,
 
 
 
四. 無界面chrome運行
linux下運行
pip install pyvirtualdisplay pip install xvfbwrapper apt-get install xvfb from pyvirtualdisplay import Display display = Display(visible=0, size=(800,600) display.start() browser = webdirver.Chrome() browser.get()

 

scrapy下無界面方式: scrapy-splash
 
 
 
 
五. scrapy的暫停和重啟
 
以拉鈎網為例,測試暫停和重啟
1. 在項目目錄先新建文件夾job_info,和scrapy.cfg同級
2. 在cmd命令行中,進入項目所在目錄,執行如下代碼
scrapy crawl  lagou -s JOBDIR=job_info/001
3. 按一次ctrl +c ,還會自動執行一些后續命令,等它處理完
4. 同樣運行scrapy crawl lagou -s JOBDIR=job_info/001,完成重啟。接着之前的繼續運行
5. 如果想重頭爬scrapy crawl lagou -s JOBDIR=job_info/002
6. 按兩次ctrl + c是立刻中斷
 
 
 
六. scrapy url去重原理
以伯樂在線為例,首先注釋掉之前設置的對接selenium,包括DOWNLOAD_MIDDLEWARES和jobbole.py中的相關代碼
 
默認去重源碼在dupefilters.py中
 
 
 
七. scrapy telnet服務
爬蟲運行時,會啟動一個telent服務,端口一般為6023
在控制面板->程序->啟動或關閉windows功能中開啟telnet
可在cmd中輸入telnet localhost 6023即可連上telnet
telnet相關操作命令
1)輸入est()可查看爬蟲狀態
2) 獲取settings中的值 settings["COOKIES_ENABLED"]
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM