当前位置: 首页 > 面试题库 >

如何使用硒和scrapy来自动化该过程?

丌官绍元
2023-03-14
问题内容

我一开始就知道您需要使用诸如硒之类的webtoolkit来自动进行抓取。

我将如何能够单击Google Play商店上的下一个按钮,以便仅出于我的大学目的刮取评论!

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from urlparse import urljoin
from selenium import webdriver
import time


class Product(scrapy.Item):
    title = scrapy.Field()


class FooSpider(CrawlSpider):
    name = 'foo'

    start_urls = ["https://play.google.com/store/apps/details?id=com.gaana&hl=en"]

    def __init__(self, *args, **kwargs):
        super(FooSpider, self).__init__(*args, **kwargs)
        self.download_delay = 0.25
        self.browser = webdriver.Chrome(executable_path="C:\chrm\chromedriver.exe")
        self.browser.implicitly_wait(60) #

    def parse(self,response):
        self.browser.get(response.url)
        sites = response.xpath('//div[@class="single-review"]/div[@class="review-header"]')
        items = []
        for i in range(0,200):
            time.sleep(20)
            button = self.browser.find_element_by_xpath("/html/body/div[4]/div[6]/div[1]/div[2]/div[2]/div[1]/div[2]/button[1]/div[2]/div/div")
            button.click()
            self.browser.implicitly_wait(30)    
            for site in sites:
                item = Product()

                item['title'] = site.xpath('.//div[@class="review-info"]/span[@class="author-name"]/a/text()').extract()
                yield item

我已经更新了代码,一次又一次地重复了40个项目。for循环出了什么问题?

似乎正在更新的源代码没有传递到xpath,这就是为什么它返回相同的40个项目的原因


问题答案:

我会做这样的事情:

from scrapy import CrawlSpider
from selenium import webdriver
import time

class FooSpider(CrawlSpider):
    name = 'foo'
    allow_domains = 'foo.com'
    start_urls = ['foo.com']

    def __init__(self, *args, **kwargs):
        super(FooSpider, self).__init__(*args, **kwargs)
        self.download_delay = 0.25
        self.browser = webdriver.Firefox()
        self.browser.implicitly_wait(60)

    def parse_foo(self.response):
        self.browser.get(response.url)  # load response to the browser
        button = self.browser.find_element_by_xpath("path") # find 
        # the element to click to
        button.click() # click
        time.sleep(1) # wait until the page is fully loaded
        source = self.browser.page_source # get source of the loaded page
        sel = Selector(text=source) # create a Selector object
        data = sel.xpath('path/to/the/data') # select data
        ...

不过,最好不要等待固定的时间。因此time.sleep(1),您可以使用http://www.obeythetestinggoat.com/how-
to-get-selenium-to-wait-for-page-load-after-a-
click.html中

介绍的方法之一来代替 。



 类似资料:
  • 问题内容: 我曾经知道您需要使用诸如selenium之类的webtoolkit来自动执行抓取。 我将如何能够单击Google Play商店上的下一个按钮,以便仅出于我的大学目的刮取评论! 我已经更新了代码,一次又一次重复地给了我40个项目。for循环怎么了? 似乎正在更新的源代码没有传递到xpath,这就是为什么它返回相同的40个项目的原因 问题答案: 我会做这样的事情: 不过,最好不要等待固定的

  • 我使用JavaSelenium项目进行网页自动化。网页包含了许多多级的影子根DOM元素,我无法使用selenium方法与它们交互。 深度css(不适用于最新的chrome浏览器) 执行人。(这真的很乏味,维护起来也很复杂) 如果你知道除了上面列出的任何其他解决方案,我可以在SeleniumJava框架中实现,请传递解决方案。提前感谢!。

  • 我想使用Cucumber与SoapUI和Selenium链接,以创建一个自动化功能测试。我只找到了一个关于它的网站,描述了首先我必须创建一个SoapUI项目并将其保存为一个。xml文件。然后,我应该使用Cucumber和Selenium将该文件包含到测试项目中。 我的第一个问题是我需要做什么配置?(在任何配置中使用xml.pom文件时) 我的第二个也是最后一个问题是:如果我每晚都和Jenkins一

  • 我正在开发一个web服务应用程序,尽管服务的运行正常,但我认为开发、测试和修复代码所花费的时间是在浪费。以下是我正在做的: > 我在Eclipse中有一个普通的java项目,在那里我有web服务的所有代码。我在构建路径中添加了一个javax.servlet.jar库,并使用中的接收请求,并以JSON格式打印结果。我使用main方法来测试和修复代码的某些部分 当我确信我的代码没有问题时,我会导航到工

  • 我试图从以下代码中找到字段名“用户设置已成功更新”: 我在C#中使用的代码是 基本上,我试图澄清,如果用户更新成功与否,所以如果成功,我希望代码返回文本“用户设置更新成功”。但我面临的问题是,即使更新成功,它也无法返回值,并抛出异常。