我正在使用Python和Scrapy制作网络爬虫/抓取器。因为有些网站是动态加载其内容的,所以我也将Selenium与PhantomJs结合使用。现在当我开始使用它时,我认为性能是可以接受的,但事实证明它很慢。现在我不确定这是因为我的代码中的一些漏洞,还是因为我使用的框架/程序不够优化。所以我问你关于我可以做些什么来提高性能的建议。
我编写的代码大约需要 35 秒来开始和结束。它正在执行大约 11 个 GET 请求和 3 个 Post 请求。
import scrapy
from scrapy.http.request import Request
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
import time
class TechcrunchSpider(scrapy.Spider):
name = "techcrunch_spider_performance"
allowed_domains = ['techcrunch.com']
start_urls = ['https://techcrunch.com/search/heartbleed']
def __init__(self):
self.driver = webdriver.PhantomJS()
self.driver.set_window_size(1120, 550)
#self.driver = webdriver.Chrome("C:UsersDanielDesktopSonstigeschromedriver.exe")
self.driver.wait = WebDriverWait(self.driver, 5) #wartet bis zu 5 sekunden
def parse(self, response):
start = time.time() #ZEITMESSUNG
self.driver.get(response.url)
#wartet bis zu 5 sekunden(oben definiert) auf den eintritt der condition, danach schmeist er den TimeoutException error
try:
self.driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, "block-content")))
print("Found : block-content")
except TimeoutException:
self.driver.close()
print(" block-content NOT FOUND IN TECHCRUNCH !!!")
#Crawle durch Javascript erstellte Inhalte mit Selenium
ahref = self.driver.find_elements(By.XPATH,'//h2[@class="post-title st-result-title"]/a')
hreflist = []
#Alle Links zu den jeweiligen Artikeln sammeln
for elem in ahref :
hreflist.append(elem.get_attribute("href"))
for elem in hreflist :
print(elem)
print("im closing myself")
self.driver.close()
end = time.time()
print("Time elapsed : ")
finaltime = end-start
print(finaltime)
我正在使用Windows 8 64位,英特尔i7-3630QM CPU @ 2,4GHZ,Nvidia Geforce GT 650M,8GB RAM。
PS:对不起德语评论
我也面临着同样的问题,每分钟只处理 2 个 url。
我通过这样做缓存网页。
......
options = ['--disk-cache=true']
self.driver = webdriver.PhantomJS(service_args=options)
......
以防万一,这将 url 处理从每分钟 2 个增加到 11 个。这可能从一个网页到另一个网页。
如果您想禁用图像加载以加快硒中的页面加载速度,请将--load-images=false
添加到上面的选项中。
希望对您有所帮助。
尝试使用 Splash 来处理带有 Javascript 的页面。