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

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

宋铭
2023-03-14
问题内容

我曾经知道您需要使用诸如selenium之类的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

介绍的方法之一来代替 。



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

  • 问题内容: 我正在尝试将Scraper与Selenium结合使用,以便能够与javascript进行交互,并且仍然具有Scrapy提供的强大的抓取框架。我编写了一个脚本,该脚本访问http://www.iens.nl,在搜索栏中输入“阿姆斯特丹”,然后成功单击搜索按钮。单击搜索按钮后,我希望scrapy从新呈现的页面中检索元素。不幸的是scrapy不会返回任何值。 这是我的代码如下所示: “属性”

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

  • 我遵循了git hub的一个简单程序-https://github.com/dequelabs/axe-selenium-java } 执行时,得到如下错误- 你能告诉我,我在这里缺少什么吗?我的js文件在下面的位置。示例截图-

  • 我试图执行一个测试在移动设备但我有下一个错误 Chrome版本:83.04103.101 我正在寻找解决方案,但什么也没找到。

  • 问题内容: 我必须登录SnapSurveys并每月下载20多个文件。现在已经是一个繁琐的过程,现在我必须每周执行一次,而手工完成将变得很繁琐,所以我想实现它的自动化并安装了Selenium来做到这一点。我已经使用SeleniumIDE(在FireFox中)跟踪了整个过程,所以我知道我想做的事情以及如何做的基础知识,但是,我遇到了一个难以理解的砖墙,试图理解该网页。实现它的结构。 使用Chrome和