1. 程式人生 > >2017.07.26 Python網絡爬蟲之Scrapy爬蟲框架

2017.07.26 Python網絡爬蟲之Scrapy爬蟲框架

返回 scripts http ref select 文本 lang bsp str

1.windows下安裝scrapy:cmd命令行下:cd到python的scripts目錄,然後運行pip install 命令

技術分享

技術分享

然後pycharmIDE下就有了Scrapy:

技術分享

在cmd下運行scrapy命令,出錯!!!:

技術分享

解決方法:

在Python的Lib\site-packages文件夾下新建一個sitecustomize.py:

import sys sys.setdefaultencoding(‘gb2312‘)

再次在cmd下運行scrapy,成功:

技術分享

2.Scrapy選擇器和XPath和CSS:通過特定的XPath或者CSS表達式來選擇HTML文件中的某個部分

(1)XPath是一門用來在XML文件中選擇節點的語言,也也可以用在HTML上,是一門在XML文檔中查找信息的語言

,XPath可以用來在XML文檔中對元素和屬性進行遍歷。

XPath含有超過100個內建的函數,這些函數用於字符串值,數值,日期和時間比較,節點和QName處理,序列處理,邏輯值等等

(2)在XPath中,有7種類型的節點:元素,屬性,文本,命名空間,處理指令,註釋以及文檔節點(或稱為根節點)。XML文檔是被作為節點樹來對待的,樹的根被稱為文檔節點或者根節點

做個簡單的XML文件:

<superhero>
<class>
<name lang="en">Tony Stark </name>
<alias>Iron Man </alias>
<sex>male </sex>
<birthday>1969 </birthday>
<age>47 </age>
</class>
<class>
<name lang="en">Peter Benjamin Parker </name>
<alias>Spider Man </alias>
<sex>male </sex>
<birthday>unknow </birthday>
<age>unknown </age>
</class>
<class>
<name lang="en">Steven Rogers </name>
<alias>Captain America </alias>
<sex>male </sex>
<birthday>19200704 </birthday>
<age>96 </age>
</class>
</superhero>

技術分享

(3)XPath使用路徑表達式在XML文檔中選取節點:常用的路徑表達式如下:

nodeName:選取此節點的所有子節點

/:從根節點選取

//:從匹配選擇的當前節點選擇文檔中的節點,不考慮它們的位置

.:選取當前節點

..:選取當前節點的父節點
@:選擇屬性

*:匹配任何元素節點

@*:匹配任何屬性節點

Node():匹配任何類型的節點

技術分享

(4)XPath選擇器如何收集數據:

技術分享

(5)嵌套選擇器:

技術分享

3.CSS選擇器(層疊樣式表):CSS規則由兩個主要的部分構成:選擇器,以及一條或多條聲明

selector{declaration1;declaration2;.......declarationN}

CSS選擇器: 例子:

.class       .intro 選擇class="intro"的所有元素

#id       #firstname 選擇id="firstname"的所有元素

*       * 選擇所有元素

element      p 選擇所有<p>元素

element,element div,p 選擇所有<div>元素和所有<p>元素

element element div p 選擇<div>元素內部的所有p元素

[attribute] [target] 選擇帶有target屬性的所有元素

[attribute=value] [target=_blank] 選擇target="_blank"的所有元素

4.CSS選擇器測試:

技術分享

5.其他選擇器:

XPath選擇器還有一個.re()方法,用於通過正則表達式來提取數據,然而不同於使用.xpath()或者css(),,re()方法返回unicode字符串的列表。所以。無法構造嵌套的.re()調用

技術分享

2017.07.26 Python網絡爬蟲之Scrapy爬蟲框架