Python 2.7 Scrapy是否使用规则爬网所有链接?

Python 2.7 Scrapy是否使用规则爬网所有链接?,python-2.7,scrapy,Python 2.7,Scrapy,代码来源: 我是python和scrapy的新手。我搜索了递归蜘蛛,找到了这个 我有几个问题: 后续工作是如何进行的?它是否只是从页面获取href链接并将其添加到请求队列中 scrapy从网页的哪个部分爬网 下面的代码是否会从网页中删除所有链接 假设我想从这个网站抓取和下载每个文件 我可能会这样做的方式是刮去这个网站上的每一个链接,检查URL的内容头和下载,如果它是一个文件。这是否可行 对不起,如果这是一个糟糕的问题 from scrapy.contrib.spiders import Craw

代码来源: 我是python和scrapy的新手。我搜索了递归蜘蛛,找到了这个

我有几个问题:

后续工作是如何进行的?它是否只是从页面获取href链接并将其添加到请求队列中

scrapy从网页的哪个部分爬网

下面的代码是否会从网页中删除所有链接

假设我想从这个网站抓取和下载每个文件

我可能会这样做的方式是刮去这个网站上的每一个链接,检查URL的内容头和下载,如果它是一个文件。这是否可行

对不起,如果这是一个糟糕的问题

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from craigslist_sample.items import CraigslistSampleItem

class MySpider(CrawlSpider):
    name = "craigs"
    allowed_domains = ["sfbay.craigslist.org"]
    start_urls = ["http://sfbay.craigslist.org/search/npo"]

    rules = (
        Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=('//a[@class="button next"]',)), callback="parse_items", follow= True),
    )

    def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.xpath('//span[@class="pl"]')
        items = []
        for titles in titles:
            item = CraigslistSampleItem()
            item["title"] = titles.xpath("a/text()").extract()
            item["link"] = titles.xpath("a/@href").extract()
            items.append(item)
        return(items)

我认为RTFM在这里确实适用,但给你一个简短的回答:

关于给出的示例

rules = (
        Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=('//a[@class="button next"]',)), callback="parse_items", follow= True),
    )
你问它爬什么。它只爬行你根据规则设置的内容。这意味着你的机器人每次只爬下一页。对于找到的每个页面,它都执行:callback=parse_items

def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.xpath('//span[@class="pl"]')
        items = []
        for titles in titles:
            item = CraigslistSampleItem()
            item["title"] = titles.xpath("a/text()").extract()
            item["link"] = titles.xpath("a/@href").extract()
            items.append(item)
        return(items)
在这种情况下,parse_items所做的是检查列表中的条目。您可以通过xpath来定义列表(正如您在上面的
titles=hxs.xpath('//span[@class=“pl”]')
)。对于列表中的每个条目(即标题中标题的
),它将文本和链接复制到一个项目中。然后它返回项目(也称为完成)

爬虫程序通过单击“下一步”按钮找到的每个页面都会解析_项

在“设置”下,您可以包括
深度限制=3
。在这种情况下,爬行蜘蛛只能爬行3深

关于您发布的站点:

不,您不需要爬行蜘蛛,因为没有多个页面。一个普通的底座卡盘就足够了。然而爬行蜘蛛可以工作,我将在下面展示一些片段。将规则设置为限制xpath('//a',),它将跟随页面上的所有链接

确保item.py包含所有必需的项目。例如,下面它指的是项[“链接”]。在item.py中,确保包含一个名为link(caps-sensitive)的项,即确保有一行--link=Field()

在parse_items下,执行如下操作:

def parse_items(self, response):
        list = response.xpath('//a"')
        items = []
        for titles in list:
            item = [INSERT WHATEVER YOU CALLED YOUR ITEM]
            item["title"] = titles.xpath("/text()").extract()
            item["link"] = titles.xpath("/@href").extract()
            if ".pdf" in item["link"]:
                SEE COMMENT BELOW
        return(items)
您需要做的最后一点是检查项目管道是如何工作的。它在您的项目中使用文件URL等