簡體   English   中英

Selenium,Scrapy Iteration(單擊下一步)僅從第一頁提取項目的 href

[英]Selenium, Scrapy Iteration (click next) only extract href of items from first page

我嘗試提取每個項目的 href(每頁六個)。 要轉到下一頁,我使用 next_click()。 Selenium webdriver 打開並點擊所有頁面(到目前為止還好)。 但只從第一頁提取項目。 那五次(與存在的頁面一樣多)。 看起來,它識別了正確的項目數,但只重新提取了第一頁的項目。 注意:如果您單擊下一頁,網址將保持不變。 非常感謝你的幫助!

import scrapy
from pprint import pprint
import time
from scrapy.linkextractors import LinkExtractor
from selenium import webdriver
class contentSpider(scrapy.Spider):
    name = "university"
    start_urls = [
            'http://unisg.prospective.ch/index.cfm'   
        ]
    
    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('//a[@id="btn-forward"]')

            try:
                next.click()
   
                time.sleep(3)

                items = response.xpath('//div[@class="section group jobContent countJobRecords"]')
                for i in items:
                    list_div = s.xpath('.//div')
                    link = list_div.xpath('.//a/@href').extract_first()
                    yield joblink_item(link=link)

            except:
                    break
                   

response是由 scrapy 創建的,而self.driver是一個 selenium 對象。
兩者互不了解,更新一個不會自動更新另一個。
因此,您只需一遍又一遍地從相同的響應中提取相同的數據。

有幾種方法可以解決您的問題:

  1. 在scrapy中做所有事情
  2. 用硒做一切
  3. 從 selenium 獲取更新的 html 並創建新的 scrapy 選擇器

由於有問題的網站似乎根本不需要硒(單擊下一個按鈕只是發送一個發布請求),我會推薦第一個選項。

Scrapy-only方法的解釋:

如果您在單擊下一頁按鈕時查看瀏覽器開發人員工具的網絡選項卡,您將看到一個包含以下詳細信息的請求:

一般的

表單數據

要得到你想要的數據,你只需要修改並執行這個請求。
測試表明,甚至可以使用單個請求獲取所有數據:

>>> request = scrapy.FormRequest(
...     url="http://unisg.prospective.ch/index.cfm",
...     formdata={"offset": "0", "limit": "30", "lang": "de", "query": ""},
... )
>>> fetch(request)
2020-11-05 11:36:17 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://unisg.prospective.ch/index.cfm> (referer: Non
e)
>>> len(response.css('.jobContent'))
30

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM