私は、特定のWebサイトからデータを抽出するためにscrapyを使用しています。問題は、スパイダーが最初のstart_urlsのWebページのみをクロールでき、WebページのURLをクロールできないことです。 私はまったく同じクモをコピー:Scrapyを使用してWebページのURLをクロールする
from scrapy.spider import BaseSpider
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from nextlink.items import NextlinkItem
class Nextlink_Spider(BaseSpider):
name = "Nextlink"
allowed_domains = ["Nextlink"]
start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//body/div[2]/div[3]/div/ul/li[2]/a/@href')
for site in sites:
relative_url = site.extract()
url = self._urljoin(response,relative_url)
yield Request(url, callback = self.parsetext)
def parsetext(self, response):
log = open("log.txt", "a")
log.write("test if the parsetext is called")
hxs = HtmlXPathSelector(response)
items = []
texts = hxs.select('//div').extract()
for text in texts:
item = NextlinkItem()
item['text'] = text
items.append(item)
log = open("log.txt", "a")
log.write(text)
return items
def _urljoin(self, response, url):
"""Helper to convert relative urls to absolute"""
return urljoin_rfc(response.url, url, response.encoding)
私はparsetextがcalled.Howeverであれば、私は私のクモをrunnedした後、テストするのlog.txtを使用し、log.txtとでは何もありません。
あなたはファイルハンドルをクローズしていませんか? – spicavigo
治療法を使用したことはありませんでしたが、[this](http://readthedocs.org/docs/sciences/en/0.9/topics/spiders.html#scrapy.spider.BaseSpider.allowed_domains) – spicavigo