python 安裝xpath_Python網絡爬蟲(四)- XPath1.XPath2.XPath在python中的應用

目錄:

1.XPath

XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。它使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的。

XPath語法

2.XPath在python中的應用xpath在Python中有一個第三方庫,支持~ lxml

注意:不要直接使用pip install lxml去安裝~直接安裝很容易安裝一個空殼!

安裝pip,主要參考博客: 在shell中輸入import pip; print(pip.pep425tags.get_supported())可以獲取到pip支持的文件名還有版本xpath的安裝

通過wheel方式安裝

下載對應的wheel文件【和Python版本對應的】

安裝wheel插件 :python2 -m pip install wheel

根據下載的本地文件安裝lxml:切換到whl文件所在的路徑,進行安裝

python2 -m pip install lxml-3.8.0-cp27-none-win32.whlwheel名一定要跟pip支持的文件名和版本符合

xpath的使用

獲取文本內容用 text()

獲取注釋用 comment()

獲取其它任何屬性用@xx,如 @href

@src

@value

3.XPath中的text()和string()區別

1.XPath中的text()和string()本質區別text()是一個node test,而string()是一個函數,data()是一個函數且可以保留數據類型。此外,還有點號(.)表示當前節點。

2.XML例子:

_知幾

用例舉例text()book/author/text()

string()book/author/string()

data()book/author/data()

.book/author/.

3.特殊用例

XML例子:

pythondjango爬蟲

20

0.8

text() 經常在XPath表達式的最后看到text(),它僅僅返回所指元素的文本內容。let $x := book/author/text() return $x

返回的結果是python 爬蟲,其中的django不屬于author直接的節點內容。string() string()函數會得到所指元素的所有節點文本內容,這些文本講會被拼接成一個字符串。let $x := book/author/string() return $x

返回的內容是python django 爬蟲。data()

大多數時候,data()函數和string()函數通用,而且不建議經常使用data()函數,有數據表明,該函數會影響XPath的性能。let $x := book/pricing/string() return $x

返回的是200.8

let $x := book/pricing/data() return $x

這樣將返回分開的20和0.8,他們的類型并不是字符串而是>xs:anyAtomicType,于是就可以使用數學函數做一定操作。

let $x := book/pricing/price/data() let $y := book/pricing/discount/data() return $x*$y

比如上面這個例子,就只能使用data(),不能使用text()或string(),因為XPath不支持字符串做數學運算。

text()不是函數,XML結構的細微變化,可能會使得結果與預期不符,應該盡量少用,data()作為特殊用途的函數,可能會出現性能問題,如無特殊需要盡量不用,string()函數可以滿足大部分的需求。

4.爬取誅仙前50章內容

主要分三個步驟:

(1)分析小說網址構成;

(2)獲取網頁,并分離出小說章節名和章節內容;

(3)寫入txt文檔。

代碼操作:# -*- coding:utf-8 -*-

import urllib,urllib2,re

from lxml import etree

#定義函數,爬取對應的數據

def getText(url,file_name):

print('開始爬取第%s章的內容'%file_name)

#偽裝請求頭

my_headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36',

}

request = urllib2.Request(url,headers=my_headers)

content = urllib2.urlopen(request).read()

return content

#定義函數,保存爬取到的數據

def save(content):

xml = etree.HTML(content)

datas = xml.xpath('/html/body/div[@id="main"]/h1 | /html/body/div[@id="main"]/p')

data = datas[2].xpath('string(.)').encode('utf-8')

name = datas[0].xpath('string(.)')

print name

print('第%s章的內容爬取完成' % file_name)

with open('txt/%s'%name+'.txt', 'wb') as f:

f.write(data)

#定義主程序接口

if __name__ == '__main__':

x=41277

while x

url = 'http://www.ty2016.net/net/zhuxian/'+str(x)+'.html'

x+=1

file_name = str(x-41278)

try:

content = getText(url,file_name)

save(content)

except Exception,a:

print a

從本地可以看到已經爬取到相關內容

注解:Xpath的獲取

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

團隊升級

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/yulongblog/blog/2988702

設計模式簡介

深入理解面向對象 向下:深入理解三大面向對象機制 封裝,隱藏內部實現 繼承,復用現有代碼  多態,改寫對象行為 向上:深刻把握面向對象機制所帶來的抽象意義,理解如何使用這些機制來表達現實世界&#xff0c…

Css3: gradient背景漸變

Css3: gradient背景漸變 原文鏈接&#xff1a;http://kk073000.blog.163.com/blog/static/34826942012123111322691/ css3實現了背景漸變。 <gradient> [ <linear-gradient> | <radial-gradient> | <repeating-linear-gradient> | <repeating-r…

模板方法

重構的關鍵技法&#xff1a; 靜態 -> 動態 早綁定 -> 晚綁定 繼承 -> 組合 編譯時依賴 -> 運行時依賴 緊耦合 -> 松耦合 "組件協作"模式 現代軟件專業分工之后的第一個結果是“框架與應用程序的劃分”&#xff0c;“組件協作”模式通過晚期綁定&#…

聚類 python_python中實現k-means聚類算法詳解

算法優缺點&#xff1a; 優點&#xff1a;容易實現 缺點&#xff1a;可能收斂到局部最小值&#xff0c;在大規模數據集上收斂較慢 使用數據類型&#xff1a;數值型數據 算法思想 k-means算法實際上就是通過計算不同樣本間的距離來判斷他們的相近關系的&#xff0c;相近的就會放…

python筆試常見題

1、冒泡排序&#xff1a; 冒泡排序算是最基本的python算法了。也算python面試遇到問的最多的了。 如果是封裝成函數。代碼如下&#xff1a; 如果初始就一個字典。那么代碼為&#xff1a; 冒泡排序的本質就是兩兩比較。根據結果調換位置。最終達到一個排序的效果。 注&#xff1…

固定資產打開提示:上年度數據未結轉!

問題現象&#xff1a;固定資產打開提示&#xff1a;上年度數據未結轉&#xff01; 問題分析&#xff1a;服務器出問題后&#xff0c;數據庫UFSYSTEM丟失&#xff0c;重新建賬后年度數據覆蓋后出現的&#xff0c;那么問題應該出在UFSYSTEM庫UA_ACCOUNT_SUB表與年度庫Accinformat…

windows MySQL 5+ 服務手動安裝

MySQL 5 服務手動安裝的方法&#xff1a;運行cmd&#xff0c;進入mysql的安裝目錄&#xff1a; C:\Users\aministrator> D: D:\> cd MySQL Server 5.6\bin D:\MySQL Server 5.6\bin>在bin目錄中運行mysqld.exe -install命令&#xff0c;安裝不完成會有提示信息。#1、手…

Kotlin防止按鈕多次點擊

剛開始寫kotlin 這段代碼寫的可能有問題 望指正 object ViewClickDelay {var hash: Int 0var lastClickTime: Long 0var SPACE_TIME: Long 3000 }infix fun View.clickDelay(clickAction: () -> Unit) {this.setOnClickListener {if (this.hashCode() ! hash) {hash thi…

C#網絡編程(同步傳輸字符串) - Part.2

服務端客戶端通信 在與服務端的連接建立以后&#xff0c;我們就可以通過此連接來發送和接收數據。端口與端口之間以流&#xff08;Stream&#xff09;的形式傳輸數據&#xff0c;因為幾乎任何對象都可以保存到流中&#xff0c;所以實際上可以在客戶端與服務端之間傳輸任何類型的…

Factory Method工廠方法

“對象創建“模式 通過”對象創建“模式繞開new&#xff0c;來避免對象創建(new)過程中所導致的緊耦合&#xff08;以來具體類&#xff09;&#xff0c;從而支持對象創建的穩定。它是接口抽象之后的第一部工作。 典型模式&#xff1a;Factory Method&#xff0c;Abstract Facto…

centos 關閉防火墻_CentOS7操作系統下如何關閉防火墻

centos系統如果不關閉防火墻在使用中會遇到不少問題&#xff0c;而且centos7和centos6關閉防火墻的方式不一樣。centos6:1.永久性生效&#xff0c;重啟后不會復原開啟&#xff1a; chkconfig iptables on關閉&#xff1a; chkconfig iptables off2.即時生效&#xff0c;重啟后復…

web 網頁按比例顯示圖片 js

原文鏈接&#xff1a;http://blog.csdn.net/liqinghuiyx/article/details/5442349 在動態站點上經常需要上傳自己的圖片&#xff0c;而這些圖片的大小是未知的&#xff0c;在顯示成縮略圖的時候必須進行按比例的縮放才能美觀地顯示。以最近做的golf網站&#xff08;http://www…

黑馬C++設計模式1

設計模式的基礎是&#xff1a;多態。 設計模式綜覽表&#xff1a; 單例模式&#xff1a;是保證一個類僅有一個實例&#xff0c;并提供一個訪問它的全局訪問點。 簡單工廠模式&#xff1a;通過專門頂一個一個類來負責創建其它類的實例&#xff0c;被創建的實例通常都具有共同的父…

對于未來的一點思考

最近在思考一個問題&#xff1a;以后的發展路線。   自己算是走上了IT的道路&#xff0c;但現在也只是在程序員階段&#xff0c;當然還未畢業&#xff0c;以后的路還很長&#xff0c;但是這個問題確是現在或以后不得不面對的一個問題。  上學期未那兩個月&#xff0c;去了N…

深入解析react關于事件綁定this的四種方式

這篇文章主要介紹了詳解react關于事件綁定this的四種方式&#xff0c;寫的十分的全面細致&#xff0c;具有一定的參考價值&#xff0c;對此有需要的朋友可以參考學習下。如有不足之處&#xff0c;歡迎批評指正。 在react組件中&#xff0c;每個方法的上下文都會指向該組件的實例…

Apache的認證、授權、訪問控制

原文鏈接&#xff1a; http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html Apache認證、授權、訪問控制 認證(Authentication)是指任何識別用戶身份的過程。授權(Authorization)是允許特定用戶訪問特定區域或信息的過程。 相關模塊和指令 認證和授權…

黑馬C++設計模式2

簡單工廠模式 //一般來說&#xff0c;自己創建一個對象的方法是在自己寫的業務函數中直接new一個對象出來//但是現實需求&#xff0c;我不想創建對象&#xff0c;我只想拿來用。&#xff08;創建類的步驟比較復雜&#xff09; //好處&#xff0c;1、客戶端和具體實現類解耦。2…

[轉]Struts 2.1發布

作者 Ian Roughley譯者 崔康 發布于 2009年2月4日 上午8時13分 Struts2框架剛剛發布最新2.1版。該版本做了重大升級&#xff0c;包括重構更多代碼到插件框架、通過增加convention插件減少XML配置和改進REST支持。 我采訪了Musachy Barroso——該版本的一位開發人員&#xff0c…

dim private public static_PHP中const,static,public,private,protected的區別

const: 定義常量&#xff0c;一般定義后不可改變static: 靜態&#xff0c;類名可以訪問public: 表示全局&#xff0c;類內部外部子類都可以訪問&#xff1b;private: 表示私有的&#xff0c;只有本類內部可以使用&#xff1b;protected: 表示受保護的&#xff0c;只有本類或子類…