1. 程式人生 > >第八天,scrapy的幾個小技巧

第八天,scrapy的幾個小技巧

一次 load 動態 content btn ajax加載 select efi def

一. 微博模擬登陸 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"]

第八天,scrapy的幾個小技巧