W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
scrapy.spiders.
SitemapSpider
SiteMapSpider允許您通過使用 Sitemaps .
它支持嵌套的站點地圖和從中發(fā)現(xiàn)站點地圖URL robots.txt .
sitemap_rules
元組列表 (regex, callback)
在哪里?
regex
是一個正則表達式,用于匹配從站點地圖中提取的URL。 regex
可以是str或已編譯的regex對象。
回調是用于處理與正則表達式匹配的URL的回調。 callback
可以是字符串(指示spider方法的名稱)或可調用的。
例如::
sitemap_rules = [('/product/', 'parse_product')]
規(guī)則按順序應用,只使用第一個匹配的規(guī)則。
如果省略此屬性,則在站點地圖中找到的所有URL都將使用 parse
回調。
sitemap_alternate_links
指定是否為一個 url
應該遵循。這些是同一網(wǎng)站的鏈接,使用同一網(wǎng)站內傳遞的另一種語言 url
塊。
例如::
<url>
<loc>http://example.com/</loc>
<xhtml:link rel="alternate" hreflang="de" rel="external nofollow" target="_blank" />
</url>
用 sitemap_alternate_links
設置,這將檢索兩個URL。用 sitemap_alternate_links
只有殘疾人 http://example.com/
將被取回。
sitemap_alternate_links
殘疾人。
sitemap_filter
(entries)這是一個過濾器函數(shù),可以重寫該函數(shù)以根據(jù)其屬性選擇站點地圖條目。
例如::
<url>
<loc>http://example.com/</loc>
<lastmod>2005-01-01</lastmod>
</url>
我們可以定義一個 sitemap_filter
要篩選的函數(shù) entries
日期:
from datetime import datetime
from scrapy.spiders import SitemapSpider
class FilteredSitemapSpider(SitemapSpider):
name = 'filtered_sitemap_spider'
allowed_domains = ['example.com']
sitemap_urls = ['http://example.com/sitemap.xml']
def sitemap_filter(self, entries):
for entry in entries:
date_time = datetime.strptime(entry['lastmod'], '%Y-%m-%d')
if date_time.year >= 2005:
yield entry
這只能找回 entries
2005年及以后年份修改。
條目是從站點地圖文檔中提取的dict對象。通常,鍵是標記名,值是其中的文本。
重要的是要注意:
由于loc屬性是必需的,因此不帶此標記的條目將被丟棄。
備用鏈接用鍵存儲在列表中 alternate
(見 sitemap_alternate_links
)
名稱空間被刪除,因此名為 {{namespace}}tagname
成為唯一 tagname
如果省略此方法,則將處理站點地圖中找到的所有條目,同時觀察其他屬性及其設置。
最簡單的示例:使用 parse 回叫:
from scrapy.spiders import SitemapSpider
class MySpider(SitemapSpider):
sitemap_urls = ['http://www.example.com/sitemap.xml']
def parse(self, response):
pass # ... scrape item here ...
使用特定回調處理某些URL,使用其他回調處理其他URL::
from scrapy.spiders import SitemapSpider
class MySpider(SitemapSpider):
sitemap_urls = ['http://www.example.com/sitemap.xml']
sitemap_rules = [
('/product/', 'parse_product'),
('/category/', 'parse_category'),
]
def parse_product(self, response):
pass # ... scrape product ...
def parse_category(self, response):
pass # ... scrape category ...
遵循中定義的站點地圖 robots.txt 文件,僅跟蹤其URL包含 /sitemap_shop ::
from scrapy.spiders import SitemapSpider
class MySpider(SitemapSpider):
sitemap_urls = ['http://www.example.com/robots.txt']
sitemap_rules = [
('/shop/', 'parse_shop'),
]
sitemap_follow = ['/sitemap_shops']
def parse_shop(self, response):
pass # ... scrape shop here ...
將SiteMapSpider與其他URL源合并::
from scrapy.spiders import SitemapSpider
class MySpider(SitemapSpider):
sitemap_urls = ['http://www.example.com/robots.txt']
sitemap_rules = [
('/shop/', 'parse_shop'),
]
other_urls = ['http://www.example.com/about']
def start_requests(self):
requests = list(super(MySpider, self).start_requests())
requests += [scrapy.Request(x, self.parse_other) for x in self.other_urls]
return requests
def parse_shop(self, response):
pass # ... scrape shop here ...
def parse_other(self, response):
pass # ... scrape other here ...
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: