首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python / Scrapy / Selenium / PhantomJs - performance

Python / Scrapy / Selenium / PhantomJs - performance
EN

Stack Overflow用户
提问于 2017-06-13 16:07:43
回答 2查看 2.3K关注 0票数 2

我正在使用Python和Scrapy制作一个网络爬虫/抓取器。因为一些网站是动态加载内容的,所以我也将Selenium与PhantomJs结合使用。现在,当我开始使用它时,我认为它的性能是可以接受的,但事实证明它相当慢。现在我不确定这是因为我的代码中的一些漏洞,还是因为我使用的框架/程序没有得到足够的优化。所以我想问你们一些关于我可以做些什么来提高性能的建议。

我写的代码大约需要。开始和结束还有35秒。它正在执行大约11个GET请求和3个Post请求。

代码语言:javascript
复制
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:\Users\Daniel\Desktop\Sonstiges\chromedriver.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,4 GT,Nvidia Geforce GT 650M,8 8GB。

PS:对德国人的评论感到抱歉

EN

回答 2

Stack Overflow用户

发布于 2017-12-11 17:03:01

我也面临着同样的问题,每分钟只处理2个url。

我通过这样做来缓存网页。

代码语言:javascript
复制
......
options = ['--disk-cache=true']
self.driver = webdriver.PhantomJS(service_args=options)
......

这会使url处理速度从每分钟2次增加到11次,以防万一。这可能是从一个网页到另一个网页。

如果您想要禁用图像加载以加快selenium中的页面加载速度,请在上面的选项中添加--load-images=false

希望能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2017-06-15 12:27:33

尝试使用Splash来处理带有Javascript的页面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44515734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档