gpt4 book ai didi

python - 我无法使用 scrapy 上的规则获取数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:24 24 4
gpt4 key购买 nike

我正在用 scrapy 做一个蜘蛛,如果我不实现任何规则,它就可以工作,但现在我正在尝试实现一个规则来获取分页器并抓取所有其余页面。但我不知道为什么我无法实现它。

蜘蛛代码:

    allowed_domains = ['guia.bcn.cat']
start_urls = ['http://guia.bcn.cat/index.php?pg=search&q=*:*']

rules = (
Rule(SgmlLinkExtractor(allow=("index.php?pg=search&from=10&q=*:*&nr=10"),
restrict_xpaths=("//div[@class='paginador']",))
, callback="parse_item", follow=True),)

def parse_item(self, response)
...

此外,我尝试在规则的允许参数中设置“index.php”,但都不起作用。

我在scrapy groups中读到我没有输入“a/”或“a/@href”,因为SgmlLinkExtractor会自动搜索链接。

控制台输出似乎运行良好,但没有得到任何结果。

有什么想法吗?

提前致谢

编辑:

使用此代码可以工作

from scrapy.selector import Selector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from bcncat.items import BcncatItem
import re

class BcnSpider(CrawlSpider):
name = 'bcn'
allowed_domains = ['guia.bcn.cat']
start_urls = ['http://guia.bcn.cat/index.php?pg=search&q=*:*']


rules = (
Rule(
SgmlLinkExtractor(
allow=(re.escape("index.php")),
restrict_xpaths=("//div[@class='paginador']")),
callback="parse_item",
follow=True),
)

def parse_item(self, response):
self.log("parse_item")
sel = Selector(response)
i = BcncatItem()
#i['domain_id'] = sel.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = sel.xpath('//div[@id="name"]').extract()
#i['description'] = sel.xpath('//div[@id="description"]').extract()
return i

最佳答案

SgmlLinkExtractor 的 allow 参数是一个正则表达式(列表)。所以“?”、“*”和“.”被视为特殊字符。

您可以使用 allow=(re.escape("index.php?pg=search&from=10&q=*:*&nr=10")) (使用 import re 在脚本开头的某个地方)

编辑:事实上,上述规则不起作用。但由于您已经有了要提取链接的受限区域,因此可以使用 allow=('index.php')

关于python - 我无法使用 scrapy 上的规则获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21095138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com