每日學點python之十五 爬蟲實戰

2021-09-09 05:30:02 字數 3782 閱讀 4150

上節講了理論,這節我們練習一下。

我們寫個簡單的看看,方面理解。

#!/usr/bin/python

#-*-coding:utf-8-*-

### @file 爬蟲.py

# @brief

# @author songqiang

# @version 1.0

# @date 2019-01-10

import urllib2

#向指定的url位址傳送請求,並返回伺服器響應的類檔案物件

response=urllib2.urlopen("")

#伺服器返回的類檔案物件支援python檔案物件的基本操作

#read()方法就是讀取檔案裡的全部內容,返回字串

html=response.read()

分析報頭:

user-agent: python-urllib/2.7直接用urllib2(user-agent: python-urllib/2.7)給乙個**傳送請求的話,確實略有些唐突了,就好比,人家每家都有門,你以乙個路人的身份直接闖進去顯然不是很禮貌。而且有一些站點不喜歡被程式(非人為訪問)訪問,有可能會拒絕你的訪問請求。

瀏覽器 就是網際網路世界上公認被允許的身份,如果我們希望我們的爬蟲程式更像乙個真實使用者,那我們第一步,就是需要偽裝成乙個被公認的瀏覽器。用不同的瀏覽器在傳送請求的時候,會有不同的user-agent頭。 urllib2預設的user-agent頭為:python-urllib/x.y(x和y是python主版本和次版本號,例如 python-urllib/2.7)。

get方式獲取伺服器資料 (爬取貼吧頁面資料)

#!/usr/bin/python

# -*-coding:utf-8-*-

### @file 貼吧spider.py

# @brief

# @author songqiang

# @version 1.0

# @date 2019-01-12

import urllib #負責url編碼處理

import urllib2

def tiebaspider(url,beginpage,endpage):

"""作用:負責處理url,分配每個url去傳送請求

url:需要處理的第乙個url

beginpage: 爬蟲執行的起始頁面

endpage: 爬蟲執行的截止頁面

"""for page in range(beginpage,endpage+1):

pn=(page-1)*50

filename="第"+str(page)+"頁.html"

#組合為完整的url 並且pn直每次增加50

fullurl=url+"&pn="+str(pn)

#呼叫loadpage()傳送獲取html頁面

html=loadpage(fullurl,filename)

writefile(html,filename)

def loadpage(url, filename):

'''作用:根據url傳送請求,獲取伺服器響應檔案

filename: 檔名

'''headers =

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

response = urllib2.urlopen(request)

return response.read()

def writefile(html,filename):

print "正在儲存"+filename

with open(filename,'w') as f:

f.write(html)

print "-"*20

#模擬main函式

if __name__=="__main__":

kw=raw_input('請輸入需要爬取的貼吧:')

#輸入起始頁和終止頁 str轉為int型別

beginpage=int(raw_input("請輸入起始頁"))

endpage=int(raw_input("請輸入終止頁"))

url = ""

key = urllib.urlencode()

#組合後url示例 kw=lol

url=url+key

tiebaspider(url,beginpage,endpage)

例項2中用了urllib,它跟urllib2不太一樣,兩個最顯著的不同如下:

post請求:

在看《精通python網路爬蟲》這本書中,韋老師提供了乙個測試**

#!/usr/bin/env python

#-*- coding:utf8 -*-

### @file post請求

# @brief

# @author songqiang

# @version 1.0

# @date 2019-01-12

import urllib

import urllib2

#通過抓包的方式獲取url 並不是瀏覽器的url

url=""

#完整的headers

headers=

# 傳送到web伺服器的表單資料

formdata =

# 經過urlencode轉碼

data = urllib.urlencode(formdata)

# 如果request()方法裡的data引數有值,那麼這個請求就是post

# 如果沒有,就是get

request = urllib2.request(url, data = data, headers = headers)

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

print "正在儲存"

with open("post.html","w") as f:

f.write(html)

print "-"*20

獲取ajax載入的內容

有些網頁內容使用ajax載入,只要記得,ajax一般返回的是json,直接對ajax位址進行post或get,就返回json資料了。

#!/usr/bin/env python

#-*- coding:utf8 -*-

### @file urllib_ajax.py

# @brief

# @author songqiang

# @version 1.0

# @date 2019-01-13

import urllib

import urllib2

url=""

headers=

# 變動的是這兩個引數,從start開始往後顯示limit個

formdata =

data = urllib.urlencode(formdata)

request = urllib2.request(url, data = data, headers = headers)

response = urllib2.urlopen(request)

print response.read()

每日學點python之四 切片

切片是指對操作的物件擷取其中一部分的操作。字串 列表 元組都支援切片操作。切片的語法 起始 結束 步長 注意 選取的區間屬於左閉右開型,即從 起始 位開始,到 結束 位的前一位結束 不包含結束位本身 我們以字串為例講解。如果取出一部分,則可以在中括號中,使用 name abcdef print na...

每日學點python之一

不管學什麼語言,我們首先要了解每種語言的發展歷史和應用前景。今天也是我學習python的第一天,我們來看看python的由來。關鍵點常識 執行速度,有速度要求的話,用c 改寫關鍵部分吧。國內市場較小 國內以python來做主要開發的,目前只有一些web2.0公司 但時間推移,目前很多國內軟體公司,尤...

每日學點python之七(名片管理系統)

file 名片管理系統 brief author songqiang version 1.0 date 2018 12 21 coding utf 8 用來儲存名片 card infors while true 1.列印功能提示 print 50 print 名片管理系統 v1.0 n print ...