如何在使用selenium时每次在scrapy xpath中更新新的页面源?

时间:2015-05-08 06:35:10

标签: python selenium xpath web-scraping scrapy

这种与scrapy合并的硒只能解决一个问题 -

我需要每次使用页面生成的新源代码更新// Currently starts at line #464: type SearchOptions struct { ... // TODO: cursor, offset, maybe others. } ,否则会一次又一次地返回重复结果。

sites = response.xpath()

1 个答案:

答案 0 :(得分:1)

点击从Selector instance传递当前页面来源后,您需要在循环中创建新的.page_source

from scrapy.selector import Selector

self.browser.implicitly_wait(30)

for i in range(0,200):
    time.sleep(20)  # TODO: a delay like this doesn't look good

    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()

    sel = Selector(text=self.browser.page_source)
    sites = sel.xpath('//div[@class="single-review"]/div[@class="review-header"]')

    for site in sites:
        item = Product()

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

请注意,您只需要调用implicitly_wait()一次 - 它不会立即添加延迟 - 它只会指示selenium在搜索元素时等待X秒。

另外,我怀疑你真的需要time.sleep(20)电话。相反,您可能希望开始使用Explicit Waits