scrapy框架XPATH選擇器與正則式使用技巧

2021-10-06 08:40:03 字數 1641 閱讀 8605

def parse_item(self, response):

item = newsitem()

item['title'] = response.xpath('//h1[@id="chan_newstitle"]/text()').extract_first()

item['url'] = response.url

item['text']=''.join(response.xpath('//div[@id="chan_newsdetail"]

//p[not(@class="editor")]/text()').extract()).strip()

item['datetime'] = response.xpath('//div[@class="chan_newsinfo_source"]

//text()').re_first('(\d+-\d+-\d+\s\d+:\d+:\d+)')

item['source'] = response.xpath('//div[@class="chan_newsinfo_source"]

item['website'] = '中華網'

yield item

以上**為解析一篇新聞詳情頁,鏈結為:

1. 對於xpath中的「//」和「/」的使用:

一般來說,「//」代表提取的節點是子孫節點,「/」代表提取的是直接子節點。

(1)但是,對於提取乙個節點的時候,如第6行**「//p[not(@class="editor")]/text()').extract()).strip()」為提取id為「chan_newsdetail」的div節點下的p節點(直接子節點),在此處使用「//」或「/」都是能夠成功提取到p節點的(根據實測結果得知)。

(2)而對於提取乙個節點的text()文字的時候需要注意,「/text()」代表提取該節點的文字,「//text()」代表提取該節點的子節點和子孫節點的文字

2. 根據id或者class屬性來選取某個節點:

(1)根據id來選取節點:

如**的第3行,根據id選取「h1」節點:

//h1[@id="chan_newstitle"]
(2)根據class來選取節點:

如**的第7行,根據class選取「div」節點:

//div[@class="chan_newsinfo_source"]
3.  選取某個屬性不是「***」的節點:

如**的第6行,選取class屬性值不是「editor」的所有p節點:

//p[not(@class="editor")]
4. 正規表示式的使用:

item['datetime'] = response.xpath('//div[@class="chan_newsinfo_source"]

//text()').re_first('(\d+-\d+-\d+\s\d+:\d+:\d+)')

item['source'] = response.xpath('//div[@class="chan_newsinfo_source"]

scrapy應用xpath語法

如 等等各種型別xpath語法可以用分號做分隔符來區分標籤 但是最需要注意的是標籤的屬性值和標籤下的內容 以及這個部分 下面將對這兩個部分書寫xpath div a text get 首先鎖定要查詢的父標籤 text response.xpath div id search nature rg ul...

scrapy爬蟲框架(一) scrapy框架簡介

開啟命令列輸入如下命令 pip install scrapy安裝完成後,python會自動將 scrapy命令新增到環境變數中去,這時我們就可以使用 scrapy命令來建立我們的第乙個 scrapy專案了。開啟命令列,輸入如下命令 scrapy startproject yourproject這裡的...

scrapy爬蟲框架

作者經過幾周的python爬蟲實踐之後,深入學習了一下scrapy這個爬蟲框架,現將一些基本知識和 總結整理一下,以備後查。2.scrapy的命令列使用 這部分網上很多部落格都有總結,不需要背,理解會用主要的命令 startproject crawl fetch list genspider.即可,...