页面上的所有链接

2024-05-15 02:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图收集一个域下所有的网址使用Scrapy。我试着用爬行蜘蛛从主页开始爬网。对于每个页面,我想使用Xpath提取所有href。并以类似键值对的格式存储数据。

Key:当前Url 值:此页上的所有链接。

class MySpider(CrawlSpider):
    name = 'abc.com'
    allowed_domains = ['abc.com']
    start_urls = ['http://www.abc.com']

    rules = (Rule(SgmlLinkExtractor()), )
    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item = AbcItem()
        item['key'] = response.url 
        item['value'] = hxs.select('//a/@href').extract()
        return item 

我的AbcItem()定义如下:

从废料项导入项,字段

class AbcItem(Item):

    # key: url
    # value: list of links existing in the key url
    key = Field()
    value = Field()
    pass

当我这样运行代码时:

nohup scrapy crawl abc.com -o output -t csv &

机器人似乎开始爬行,我可以看到nohup.out文件被所有配置日志填充,但是没有来自输出文件的信息。。我想收集的是哪个,有人能帮我吗?我的机器人怎么了?


Tags: 文件keycomurlfieldvalueresponse机器人
2条回答

您应该为规则定义回调。下面是从twitter.com主页(follow=False)获取所有链接的示例:

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.item import Item, Field


class MyItem(Item):
    url= Field()


class MySpider(CrawlSpider):
    name = 'twitter.com'
    allowed_domains = ['twitter.com']
    start_urls = ['http://www.twitter.com']

    rules = (Rule(SgmlLinkExtractor(), callback='parse_url', follow=False), )

    def parse_url(self, response):
        item = MyItem()
        item['url'] = response.url
        return item

然后,在输出文件中,我看到:

http://status.twitter.com/
https://twitter.com/
http://support.twitter.com/forums/26810/entries/78525
http://support.twitter.com/articles/14226-how-to-find-your-twitter-short-code-or-long-code
...

希望能有所帮助。

如果不显式设置回调函数,scrapy将使用方法parse来处理已爬网的页面。因此,应该添加parse_项作为回调,或者更改要解析的名称。

相关问题 更多 >

    热门问题