我試圖從使用Scrapy的頁面中提取所有鏈接,但我努力使用LinkExtractor。我已經試過如下:使用Scrapy的LinkExtractor
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from Funda.items import FundaItem
class FundaSpider(scrapy.Spider):
name = "Funda"
allowed_domains = ["funda.nl"]
start_urls = [
"http://www.funda.nl/koop/amsterdam/"
]
rules = (
Rule(LinkExtractor(), callback='parse_item')
)
def parse_item(self, response):
filename = response.url.split("/")[-2] + '.html'
with open(filename, 'wb') as f:
f.write(response.body)
我的理解是,包括LinkExtractor()
爲Rule
應使response
只包含鏈接。但是,如果我查看生成的amsterdam.html
文件,它似乎仍包含整個網頁,而不僅僅是鏈接。
我怎樣才能得到response
只包含鏈接?
_如何得到響應只包含鏈接?_我不明白你的問題。一些事情:[鏈接提取器](http://doc.scrapy.org/en/latest/topics/link-extractors.html)用於從響應中提取鏈接。 LinkExtractor()。extract_links(response)'返回'''鏈接'對象(帶有'.url'屬性)。 'Rule'對象中的鏈接提取器用於'CrawlSpider'子類,以便蜘蛛遵循鏈接,但是您在回調中獲得的是「response」中的頁面,而不是URL。 –
謝謝Paul,我會試着解釋一下:'start_urls'中的主頁面包含了各個房屋出售頁面的鏈接。最終,我想打開個別房屋的頁面並從中提取數據。文檔中提到'extract_links'返回'scrapy.link.Link'對象列表。正如我從https://github.com/scrapy/scrapy/blob/master/scrapy/link.py#L8瞭解到的那樣,'Link'類具有'url','text','fragment'和'nofollow'屬性,但我怎樣才能從每個鏈接獲得完整的「響應」? –
你必須用URL生成'Request'對象。 Scrapy只理解'請求'。 '鏈接'對象本身只是URL信息的持有者(沒有回調,沒有標題等)。所以在某些時候你需要'返回scrapy.Request(link.url,callback = ......)'。 –