华南俳烁实业有限公司

python

當(dāng)前位置:中華考試網(wǎng) >> python >> python爬蟲(chóng) >> 文章內(nèi)容

怎么用python扒網(wǎng)頁(yè)?

來(lái)源:中華考試網(wǎng)  [2020年10月21日]  【

  python爬蟲(chóng)網(wǎng)頁(yè)的基本流程:

  首先選取一部分精心挑選的種子URL。

  將這些URL放入待抓取URL隊(duì)列。

  從待抓取URL隊(duì)列中讀取待抓取隊(duì)列的URL,解析DNS,并且得到主機(jī)的IP,并將URL對(duì)應(yīng)的網(wǎng)頁(yè)下載下來(lái),存儲(chǔ)進(jìn)已下載網(wǎng)頁(yè)庫(kù)中。此外,將這些URL放進(jìn)已抓取URL隊(duì)列。

  分析已抓取URL隊(duì)列中的URL,從已下載的網(wǎng)頁(yè)數(shù)據(jù)中分析出其他URL,并和已抓取的URL進(jìn)行比較去重,最后將去重過(guò)的URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。

  1、HTTP請(qǐng)求實(shí)現(xiàn)

  使用urllib2/urllib實(shí)現(xiàn):

  urllib2和urllib是Python中的兩個(gè)內(nèi)置模塊,要實(shí)現(xiàn)HTTP功能,實(shí)現(xiàn)方式是以u(píng)rllib2為主,urllib為輔。

  urllib2提供一個(gè)基礎(chǔ)函數(shù)urlopen,通過(guò)向指定的URL發(fā)出請(qǐng)求來(lái)獲取數(shù)據(jù)。最簡(jiǎn)單的形式是:

1

2

3

4

import urllib2

response=urllib2.urlopen('http://www.zhihu.com')

html=response.read()

print html

  其實(shí)可以將上面對(duì)http://www.zhihu.com的請(qǐng)求響應(yīng)分為兩步,一步是請(qǐng)求,一步是響應(yīng),形式如下:

1

2

3

4

5

6

7

import urllib2

# 請(qǐng)求

request=urllib2.Request('http://www.zhihu.com')

# 響應(yīng)

response = urllib2.urlopen(request)

html=response.read()

print html

  還有post請(qǐng)求實(shí)現(xiàn):

1

2

3

4

5

6

7

8

9

10

import urllib

import urllib2

url = 'http://www.xxxxxx.com/login'

postdata = {'username' 'qiye',

    'password' 'qiye_pass'}

# info 需要被編碼為urllib2能理解的格式,這里用到的是urllib

data = urllib.urlencode(postdata)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

html = response.read()

  2、請(qǐng)求頭headers處理

  將上面的例子改寫(xiě)一下,加上請(qǐng)求頭信息,設(shè)置一下請(qǐng)求頭中的User-Agent域和Referer域信息。

1

2

3

4

5

6

7

8

9

10

11

12

13

import urllib

import urllib2

url = 'http://www.xxxxxx.com/login'

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

referer='http://www.xxxxxx.com/'

postdata = {'username' 'qiye',

    'password' 'qiye_pass'}

# 將user_agent,referer寫(xiě)入頭信息

headers={'User-Agent':user_agent,'Referer':referer}

data = urllib.urlencode(postdata)

req = urllib2.Request(url, data,headers)

response = urllib2.urlopen(req)

html = response.read()

  3、Cookie處理

  urllib2對(duì)Cookie的處理也是自動(dòng)的,使用CookieJar函數(shù)進(jìn)行Cookie的管理。如果需要得到某個(gè)Cookie項(xiàng)的值,可以這么做:

1

2

3

4

5

6

7

import urllib2

import cookielib

cookie = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

response = opener.open('http://www.zhihu.com')

for item in cookie:

    print item.name+':'+item.value

  但是有時(shí)候會(huì)遇到這種情況,我們不想讓urllib2自動(dòng)處理,我們想自己添加Cookie的內(nèi)容,可以通過(guò)設(shè)置請(qǐng)求頭中的Cookie域來(lái)做:

1

2

3

4

5

6

7

import  urllib2

opener = urllib2.build_opener()

opener.addheaders.append( ( 'Cookie''email=' "xxxxxxx@163.com" ) )

req = urllib2.Request( "http://www.zhihu.com/" )

response = opener.open(req)

print response.headers

retdata = response.read()

python課程免費(fèi)試聽(tīng)預(yù)約

  • 地區(qū):
  • 姓名:
  • 手機(jī):
責(zé)編:fushihao
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語(yǔ)考試
  • 學(xué)歷考試
松溪县| 邢台县| 西吉县| 二连浩特市| 玛沁县| 河北省| 出国| 大丰市| 大宁县| 台中县| 始兴县| 高尔夫| 黄梅县| 吐鲁番市| 堆龙德庆县| 雷波县| 斗六市| 连城县| 会理县| 凉山| 哈巴河县| 六安市| 筠连县| 崇文区| 出国| 新河县| 磐石市| 杨浦区| 城市| 两当县| 钦州市| 连江县| 柘荣县| 泰和县| 科技| 谷城县| 景宁| 赤城县| 霍林郭勒市| 罗山县| 息烽县|