gpt4 book ai didi

scrapy - 广泛的 Scrapy 爬行 : sgmlLinkextractor rule does not work

转载 作者:行者123 更新时间:2023-12-01 15:19:43 31 4
gpt4 key购买 nike

我花了很多时间玩弄和使用谷歌,但我无法解决我的问题。我是 Scrapy 的新手,希望你能帮助我。

部分有效的爬虫:我从 MySQL 数据库中定义我的 start_requests url。使用“parse_item”语句,我将响应写入单独的文件。这两个步骤都可以正常工作。

我的问题:此外,我想跟踪每个包含“.ch”的网址,并且——就像我对 start_requests 所做的那样——将它们发送到“parse_item”方法。因此,我使用 sgmlLinkExtractor 和“parse_item”方法定义了一个规则作为回调。这是行不通的。完成后,我只有“start_requests”中定义的 url 的文件。我没有收到任何错误消息。

这是我的代码:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
import mysql.connector
from scrapy.http import Request

class FirstSpider(CrawlSpider):
name = 'firstspider'
start_urls = []

def start_requests(self):
conn = mysql.connector.connect(user='root', password = 'root', host= 'localhost', database = 'Eistee')
cursor = conn.cursor()

query = ("SELECT Domain, CompanyName FROM Crawlbydomain LIMIT 300, 100")

cursor.execute(query)

results = cursor.fetchall()

for result in results:
urlrequest = 'http://'+result[0]
yield Request(urlrequest, callback = self.parse_item )

rules = (Rule (SgmlLinkExtractor(allow=('.ch', )), callback='parse_item', follow= True),)

def parse_item(self, response):

filename = response.url.translate(None, './')
open(filename, 'wb').write(response.body)

你能帮帮我吗?

最佳答案

要使 CrawlSpider 发挥其“魔力”,您需要请求通过 CrawlSpiderparse() 回调。

因此在 start_requests() 中,您的 Requests 必须使用 callback=self.parse(或者不设置 callback 参数)

如果您还希望启动请求通过parse_item,您需要在您的蜘蛛中设置一个parse_start_url 属性设置为parse_item

所以你需要有这样的东西:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
import mysql.connector
from scrapy.http import Request

class FirstSpider(CrawlSpider):
name = 'firstspider'

def start_requests(self):
conn = mysql.connector.connect(user='root', password = 'root', host= 'localhost', database = 'Eistee')
cursor = conn.cursor()

query = ("SELECT Domain, CompanyName FROM Crawlbydomain LIMIT 300, 100")

cursor.execute(query)

results = cursor.fetchall()

for result in results:
urlrequest = 'http://'+result[0]
yield Request(urlrequest)

rules = (Rule (SgmlLinkExtractor(allow=('.ch', )), callback='parse_item', follow= True),)

def parse_item(self, response):

filename = response.url.translate(None, './')
open(filename, 'wb').write(response.body)

parse_start_url = parse_item

关于scrapy - 广泛的 Scrapy 爬行 : sgmlLinkextractor rule does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489370/

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