Jas*_*ren 5 python web-crawler scrapy
我的第一个问题:)
我试图抓住我的学校网站,查找所有可能的网页.但我无法将链接转换为文本文件.我有正确的权限,所以这不是问题.
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from scrapy.spider import BaseSpider
class hsleidenSpider(CrawlSpider):
name = "hsleiden1"
allowed_domains = ["hsleiden.nl"]
start_urls = ["http://hsleiden.nl"]
# allow=() is used to match all links
rules = [
Rule(SgmlLinkExtractor(allow=()), follow=True),
Rule(SgmlLinkExtractor(allow=()), callback='parse_item')
]
def parse_item(self, response):
x = HtmlXPathSelector(response)
filename = "hsleiden-output.txt"
open(filename, 'ab').write(response.url)
Run Code Online (Sandbox Code Playgroud)
所以我只在hsleiden.nl页面上扫描.我想将response.url放入文本文件hsleiden-output.txt中.
有没有办法做到这一点?
参考CrawlSpider的文档,如果多个规则匹配同一链接,则仅使用第一个。
因此,由于重定向,使用第一条规则会导致看似无限循环。由于第二条规则被忽略,因此任何匹配的链接都不会传递给 parse_item 回调,这意味着没有输出文件。
需要进行一些调查来解决重定向问题(并修改第一个规则,以便它不会与第二个规则冲突),但将其完全注释掉将产生一个链接的输出文件,如下所示:
ETC
它们全部合并在一行上,因此您可能需要在每次写入输出文件时添加换行符或分隔符。