我如何指定哪些链接

2024-10-01 09:26:35 发布

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

我正在用scrapy抓取我的网站http://www.cseblog.com

我的蜘蛛如下:

from scrapy.spider import BaseSpider
from bs4 import BeautifulSoup ## This is BeautifulSoup4
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

from blogscraper.items import BlogArticle ## This is for saving data. Probably insignificant.

class BlogArticleSpider(BaseSpider):
    name = "blogscraper"
    allowed_domains = ["cseblog.com"]
    start_urls = [
        "http://www.cseblog.com/",
    ]

    rules = (
        Rule(SgmlLinkExtractor(allow=('\d+/\d+/*"', ), deny=( ))),
    )

    def parse(self, response):
        site = BeautifulSoup(response.body_as_unicode())
        items = []
        item = BlogArticle()
        item['title'] = site.find("h3" , {"class": "post-title" } ).text.strip()
        item['link'] = site.find("h3" , {"class": "post-title" } ).a.attrs['href']
        item['text'] = site.find("div" , {"class": "post-body" } )
        items.append(item)
        return items

我在哪里指定它需要爬网类型的所有链接 http://www.cseblog.com/{d+}/{d+}/{*}.html和 http://www.cseblog.com/search/{*} 递归地

但从中保存数据 http://www.cseblog.com/{d+}/{d+}/{*}.html


Tags: fromimportcomhttptitlewwwsiteitems
1条回答
网友
1楼 · 发布于 2024-10-01 09:26:35

你必须创建两个或一个告诉scrapy允许这些类型的url。基本上你希望规则列表是这样的

rules = (
        Rule(SgmlLinkExtractor(allow=('http://www.cseblog.com/{d+}/{d+}/{*}.html', ), deny=( )),call_back ='parse_save' ),
        Rule(SgmlLinkExtractor(allow=('http://www.cseblog.com/search/{*}', ), deny=( )),,call_back = 'parse_only' ))

除非你想用crawn方法来重写基类和crawn方法。在

这两种链接类型都有不同的回调,实际上,您可以决定要保存哪些已处理的页面数据。而不是进行一次回调,然后再次进行检查响应.url. 在

相关问题 更多 >