關於爬蟲的一些東西

2021-07-07 03:10:52 字數 3006 閱讀 8555

這幾天在寫乙個爬蟲,實際上整個過程和思路很簡單,難點在於繁雜的格式處理和一些未知的小問題,還有對python不太熟悉.基本上是邊學邊寫.記錄一些過程中值得記住的東西.

關於python的:

1.檔案的開頭要用###coding:utf-8

2.建立資料夾可以要import os

os.mkdir(r'./newdir/')

tips:字串前加r的作用是取消後面字串的轉義.

3.建立檔案的操作是

f = open(r'./1.txt','w+')

f.write('123')

text = f.read()

f.close()

其中第一步的操作中第二個引數的作用是指定讀寫型別.

w       以寫方式開啟,

a        以追加模式開啟 (從 eof 開始, 必要時建立新檔案)

r+      以讀寫模式開啟

w+     以讀寫模式開啟 (參見 w )

a+      以讀寫模式開啟 (參見 a )

rb      以二進位制讀模式開啟

wb     以二進位制寫模式開啟 (參見 w )

ab      以二進位制追加模式開啟 (參見 a )

rb+    以二進位制讀寫模式開啟 (參見 r+ )

wb+   以二進位制讀寫模式開啟 (參見 w+ )

ab+    以二進位制讀寫模式開啟 (參見 a+ )

4.異常捕獲的語句體為

try:

語句塊1

except:

語句塊1出錯時的語句塊

5.用python dict得到的key:value可以直接轉成json格式.

第一步要匯入from json import *

第二步生成乙個dict 比如字典d

第三步 轉換成json格式 jsn=jsonencoder().encode(d)

關於beautifulsoup

安裝(ubuntu)

tar -xzvf beautifulsoup4-4.2.0.tar.gz

進入解壓後的目錄然後執行

python setup.py build

sudo python setup.py install

除此之外還可以用install命令進行安裝

直接sudo apt-get install python-bs4

然後匯入時使用from bs4 import beautifulsoup

2.使用beautifulsoup

from bs4 import beautifulsoup

import urllib2

url = ''

html = urllib2.urlopen(url)

soup = beautifulsoup(url)

divall = soup.findall('div')

for div in divall:

print div

3.需要格外注意的.

對網頁的抓取,beautifulsoup可以很好很精確的抓指定標籤,但是在一些時候並不能很好的抓取標籤中的完整內容.這個問題曾一度讓我懷疑beautifulsoup的能力,後來查了資料才知道,原來這和beautifulsoup沒什麼關係,而是解析器的問題,在預設情況下,beautifulsoup使用html.parser這個直譯器,它速度很快,但是解析力糾錯力不足,有時候當出現標籤巢狀和

混合時,及其容易錯誤解析.從而造成內容不全,亂碼等問題.還有乙個解析器,名字是lxml,這個解析器的解析力和糾錯力比html.parser要強,但是面對多巢狀和

混合使用的時候有時候也常常犯錯,最後乙個是html5lib解析器,它的解析糾錯能力極強,但是解析速度較慢.我們可以根據需要選取適當的解析器.

如何指定解析器呢?

在2中 soup = beautifulsoup(html,'解析器名')其他不變就可以了.

例如. soup = beautifulsoup(html,'html5lib')

sudo apt-get install python-html5lib

就可以了,然後在python中直接使用,無需import

關於抓js動態渲染頁面的.

這個可以使用pyqt中的乙個庫,qwebkit

具體可以

from pyqt5.qtwidgets import *

from pyqt5.qtcore import *

from pyqt5.qtwebkitwidgets import *

不過這種方法比較慢,它相當於用乙個沒有介面的瀏覽器把頁面載入進去,然後把用js動態渲染完的頁面拿出來.

一般來說,可以通過讀它前端的js指令碼來了解它的行為,一般來說乙個事件會觸發乙個ajax請求,分析出它的請求位址,就可以進行模擬請求得到它想要動態渲染的內容了.這方面還有很多需要研究的地方.比如如何使用審查元素當中的功能快速定位和分析js的行為.

關於堆,棧的一些東西

堆和棧的區別 1 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 u 1 棧區 stack 由編譯器自動分配釋放 由編譯器在需要的時候分配,在不需要的時候自動清除 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。u 2 堆區 heap 一般由程式...

關於VBO的一些東西

有時候你不得不承認,opengl的開發真的不如directx,特別對於入門的人來說,乙個簡單的概念可以讓我嚼上幾天不得騎姐。vbo可以說是opengl中里程碑似的東西,通過vbo我們可以把需要渲染的圖元的頂點資訊,直接上傳儲存在gpu的視訊記憶體中。由於最早的opengl不支援例項化繪製,導致在繪製...

關於 media的一些東西

首先,media是css3的新增的標籤,主要的用途就是可以根據不同的螢幕你可以定義不同的樣式來實現響應式布局 先了解一下官方是怎麼定義的吧 使用 media 查詢,你可以針對不同的 型別定義不同的樣式。media 可以針對不同的螢幕尺寸設定不同的樣式,特別是如果你需要設定設計響應式的頁面,media...