我花了很多時間玩弄和使用谷歌,但我無法解決我的問題。我是Scrapy的新手,希望你能幫助我。廣泛的Scrapy抓取:sgmlLinkextractor規則不起作用
工作的蜘蛛的一部分:我定義我的start_requests從MySQL數據庫中刪除。通過'parse_item'語句,我將響應寫入單獨的文件中。這兩個步驟都可以正常工作。
我的問題:另外我想跟隨每個包含'.ch'的url,並且 - 和我爲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)
你能幫助我嗎?
非常感謝你,它的工作原理! :) –
要將啓動請求也發送到parse_item函數,我使用了以下方法:https://groups.google.com/forum/#!topic/scrapy-users/lAYpjTAP46Q –