之前我們使用了selenium加Firefox作為下載中間件來實現爬取京東的商品信息。但是在大規模的爬取的時候,Firefox消耗資源比較多,因此我們希望換一種資源消耗更小的方法來爬取相關的信息。
下面就使用selenium加PhantomJS來實現之前的相同的邏輯。
這里需要修改的就是spider.py文件,其余的部分並不需要做出修改,我們給phantomjs添加一個User-Agent信息,並且設置不加載圖片,這樣將會加快渲染的速度。
spider.py
from scrapy import Spider,Request
from selenium import webdriver
class JingdongSpider(Spider):
name = 'jingdong'
def __init__(self):
SERVICE_ARGS = ['--load-images=false', '--disk-cache=true', '--ignore-ssl-errors=true']
self.browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
self.browser.set_page_load_timeout(30)
def closed(self,spider):
print("spider closed")
self.browser.close()
def start_requests(self):
start_urls = ['https://search.jd.com/Search?keyword=%E6%96%87%E8%83%B8&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&suggest=1.his.0.0&page={}&s=1&click=0'.format(str(i)) for i in range(1,10,2)]
for url in start_urls:
yield Request(url=url, callback=self.parse)
def parse(self, response):
selector = response.xpath('//ul[@class="gl-warp clearfix"]/li')
print(len(selector))
print('---------------------------------------------------')
執行程序,效果是一樣的。