Scrapy 粗刮爬网:sgmlLinkextractor规则不起作用
我花了很多时间在谷歌上玩,但我无法解决我的问题。我是个新手,希望你能帮助我 spider工作的一部分:我从MySQL数据库中定义我的start_请求URL。使用“parse_item”语句,我将响应写入单独的文件中。这两个步骤都很好 我的问题是:另外,我希望跟踪包含“.ch”的每个url,并且-就像我对start\u请求所做的那样-将它们发送到“parse\u item”方法。因此,我使用sgmlLinkExtractor和“parse_item”方法定义了一个规则作为回调。这是行不通的。完成后,我只有“启动请求”中定义的URL的文件。我没有收到任何错误消息 这是我的密码:Scrapy 粗刮爬网:sgmlLinkextractor规则不起作用,scrapy,Scrapy,我花了很多时间在谷歌上玩,但我无法解决我的问题。我是个新手,希望你能帮助我 spider工作的一部分:我从MySQL数据库中定义我的start_请求URL。使用“parse_item”语句,我将响应写入单独的文件中。这两个步骤都很好 我的问题是:另外,我希望跟踪包含“.ch”的每个url,并且-就像我对start\u请求所做的那样-将它们发送到“parse\u item”方法。因此,我使用sgmlLinkExtractor和“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'
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)
你能帮帮我吗?要让
爬行蜘蛛
发挥它的“魔力”,你需要请求通过爬行蜘蛛
的解析()
回调
因此,在start\u requests()
中,您的请求必须使用callback=self.parse
(或者不设置callback
参数)
如果您还希望开始请求通过parse_item
,则需要将spider集合中的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
为了将启动请求也发送到parse_item函数,我使用了以下方法: