python

导航

怎么用python扒网页?

来源 :中华考试网 2020-10-21

  python爬虫网页的基本流程:

  首先选取一部分精心挑选的种子URL。

  将这些URL放入待抓取URL队列。

  从待抓取URL队列中读取待抓取队列的URL,解析DNS,并且得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

  分析已抓取URL队列中的URL,从已下载的网页数据中分析出其他URL,并和已抓取的URL进行比较去重,最后将去重过的URL放入待抓取URL队列,从而进入下一个循环。

  1、HTTP请求实现

  使用urllib2/urllib实现:

  urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅。

  urllib2提供一个基础函数urlopen,通过向指定的URL发出请求来获取数据。最简单的形式是:

1

2

3

4

import urllib2

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

html=response.read()

print html

  其实可以将上面对http://www.zhihu.com的请求响应分为两步,一步是请求,一步是响应,形式如下:

1

2

3

4

5

6

7

import urllib2

# 请求

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

# 响应

response = urllib2.urlopen(request)

html=response.read()

print html

  还有post请求实现:

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、请求头headers处理

  将上面的例子改写一下,加上请求头信息,设置一下请求头中的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写入头信息

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对Cookie的处理也是自动的,使用CookieJar函数进行Cookie的管理。如果需要得到某个Cookie项的值,可以这么做:

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

  但是有时候会遇到这种情况,我们不想让urllib2自动处理,我们想自己添加Cookie的内容,可以通过设置请求头中的Cookie域来做:

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()

分享到

相关资讯