【问题标题】:Scrapy not entering parse methodScrapy没有进入解析方法
【发布时间】:2015-09-03 04:01:59
【问题描述】:

我不明白为什么这段代码没有进入解析方法。 它与文档中的基本蜘蛛示例非常相似:http://doc.scrapy.org/en/latest/topics/spiders.html 而且我很确定这在当天早些时候有效...不确定我是否修改了某些内容..

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from scrapy.spider import Spider
from scrapy.selector import HtmlXPathSelector
from scrapy import log
from scrapy.selector import Selector


class jobSpider(Spider):
    name='jobSpider'
    wd = webdriver.Chrome()
    wd.get("some url")
    wd.switch_to_frame("cible")


def parse(self, response):
    log.start()

    wait = WebDriverWait(wd, 10).until(
    (EC.visibility_of_element_located((By.ID, 'blocResultat'))))
    print(wd.page_source)

    stuff=Selector(text=wd.page_source).xpath('//a[contains(@onclick,"win=window.o    pen(\'JobOffs")]').extract() 
    print(stuff)

【问题讨论】:

  • 您在任何时候都没有调用 parse 。另外,你有 self 作为参数,它应该是类的一部分吗?
  • doc.scrapy.org/en/latest/topics/spiders.html 参见示例。无需调用它。他们也把自己作为论据
  • 要么您的代码不正确,要么您的缩进错误。请修复缩进,使其与脚本中的缩进相同。
  • 已修复。在我的代码中是正确的

标签: python selenium web-scraping web-crawler scrapy


【解决方案1】:

您的parse(self, response): 方法不属于jobSpider 类。如果您查看Scrapy documentation,您会发现parse 方法必须是您的蜘蛛类的方法。

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from scrapy.spider import Spider
from scrapy.selector import HtmlXPathSelector
from scrapy import log
from scrapy.selector import Selector


class jobSpider(Spider):
    name='jobSpider'
    wd = webdriver.Chrome()
    wd.get("https://www.leforem.be/particuliers/offres-emploi-recherche-par-criteres.html?exParfullText=&exPar_search_=true&exParGeographyEdi=true")
    wd.switch_to_frame("cible")


    def parse(self, response):
        log.start()

        wait = WebDriverWait(wd, 10).until(
        (EC.visibility_of_element_located((By.ID, 'blocResultat'))))
        print(wd.page_source)

        stuff=Selector(text=wd.page_source).xpath('//a[contains(@onclick,"win=window.o    pen(\'JobOffs")]').extract() 
        print(stuff)

此外,您需要通过在类中的任何数据上使用 self. 前缀来引用 parse 方法中的类数据。

此外,您的蜘蛛上缺少 start_urls 列表。没有它,蜘蛛将不知道从哪里开始,也不会做任何事情。

【讨论】:

  • 您能详细说明一下吗?标识仍然是错误的抱歉,但是解析块作为一个缩进,所以它在类中对吗?
  • @dkx22 没错。我将编辑我的答案,以准确地向您展示我的意思。
  • 该死的仍然无法正常工作,正如我所说,我确信这曾经可以正常工作。我仍然有一个文件,其中包含该脚本之前给我的输出,并且我没有使用 self.... 但我仍然按照您的操作和下面的响应建议但不:/
  • @dkx22 “它不起作用”没有帮助。你能用你正在运行的确切代码和你遇到的错误更新你的帖子吗?
  • 我没有使用过 Scapy,但是从阅读文档来看,您似乎缺少 start_urls/start_requests
【解决方案2】:

您必须使用self 访问属性,而parse 是该类的一部分。

def parse(self, response):
    log.start()
    wait = WebDriverWait(self.wd, 10).until(
    (EC.visibility_of_element_located((By.ID, 'blocResultat'))))
    print(self.wd.page_source)
    stuff=Selector(text=self.wd.page_source).xpath('//a[contains(@onclick,"win=window.o    pen(\'JobOffs")]').extract() 
    print(stuff)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多