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

selenium与scrapy的动态页面

令狐凌
2023-03-14
问题内容

我正在尝试使用scrapy从网页中抓取产品信息。我的待抓取网页如下所示:

  • 从包含10个产品的product_list页面开始
  • 单击“下一步”按钮将加载接下来的10个产品(两个页面之间的网址不变)
  • 我使用LinkExtractor跟随每个产品链接进入产品页面,并获取我需要的所有信息
    我试图复制下一个按钮的ajax调用,但是无法正常工作,因此我尝试使用selenium。我可以在单独的脚本中运行selenium的webdriver,但是我不知道如何与scrapy集成。selenium部分应该放在哪里我的刮spider蜘蛛里?

我的蜘蛛非常标准,如下所示:

class ProductSpider(CrawlSpider):
    name = "product_spider"
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/shanghai']
    rules = [
        Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
        ]

    def parse_product(self, response):
        self.log("parsing product %s" %response.url, level=INFO)
        hxs = HtmlXPathSelector(response)
        # actual data follows

任何想法表示赞赏。谢谢!


问题答案:

这实际上取决于你需要如何刮取网站以及你希望如何以及要获取什么数据。

这是一个示例,你可以使用Scrapy+ 跟踪eBay上的分页Selenium

import scrapy
from selenium import webdriver

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    allowed_domains = ['ebay.com']
    start_urls = ['http://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40']

    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self, response):
        self.driver.get(response.url)

        while True:
            next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a')

            try:
                next.click()

                # get the data and write it to scrapy items
            except:
                break

        self.driver.close()

除了必须与结合使用之外Selenium,还有另一种选择Scrapy



 类似资料:
  • 我最近用python和Selenium做了一个webscraper,我发现做起来非常简单。页面使用ajax调用加载数据,最初我等待一个固定的time_out加载页面。有一段时间奏效了。之后,我发现selenium有一个内置函数WebDriverWait,它可以使用wait.until()等待特定元素的加载。这使我的webscraper运行得更快。 问题是,我对结果还是不满意。我下载内容平均每页花了

  • 本文向大家介绍scrapy结合selenium解析动态页面的实现,包括了scrapy结合selenium解析动态页面的实现的使用技巧和注意事项,需要的朋友参考一下  1. 问题 虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个爬虫,写

  • 问题内容: 我试图在Scrapy及其xpath选择器的帮助下抓取一个非常简单的网页,但由于某些原因,我拥有的选择器在Scrapy中不起作用,但在其他xpath实用程序中却起作用 我正在尝试解析此html代码段: Scrapy parse_item代码: Scrapy不会从中提取任何文本,但是如果我得到相同的xpath和html代码片段并在此处运行它,则效果很好。 如果我使用这个xpath: 我得到

  • 本文向大家介绍scrapy与selenium结合爬取数据(爬取动态网站)的示例代码,包括了scrapy与selenium结合爬取数据(爬取动态网站)的示例代码的使用技巧和注意事项,需要的朋友参考一下 scrapy框架只能爬取静态网站。如需爬取动态网站,需要结合着selenium进行js的渲染,才能获取到动态加载的数据。 如何通过selenium请求url,而不再通过下载器Downloader去请求

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

  • 问题内容: 我有一个网页,当向下滚动页面直到每个项目都被加载时,它会不断加载新项目。 我正在使用Java中的Selenium,需要向下滚动到页面底部才能加载所有内容。 我尝试了几种不同的选项,例如滚动到页面底部的元素: 不过,这只会向下滚动一次,然后网页会继续加载。 我也尝试过这种方法,该方法也只能向下滚动一次,因为它只考虑了浏览器的高度。 非常感谢您的帮助。 问题答案: 我将为此提供Python