第八天,scrapy的幾個小技巧
阿新 • • 發佈:2018-09-28
一次 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的幾個小技巧