python爬虫如何爬取get请求的页面数据?(附代码)


当前第2页 返回上一页

案例:爬取使用百度根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦’的页面数据)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#!/usr/bin/env python

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

import urllib.request

import urllib.parse

if __name__ == "__main__":

    #原始url中存在非ASCII编码的值,则该url无法被使用。

    #url = 'http://www.baidu.com/s?ie=utf-8&kw=周杰伦'

    #处理url中存在的非ASCII数据值

    url = 'http://www.baidu.com/s?'

    #将带有非ASCII的数据封装到字典中,url中非ASCII的数据往往都是'?'后面键值形式的请求参数

    param = {

        'ie':'utf-8',

        'wd':'周杰伦'

    }

    #使用parse子模块中的urlencode函数将封装好的字典中存在的非ASCII的数值进行ASCII编码

    param = urllib.parse.urlencode(param)

    #将编码后的数据和url进行整合拼接成一个完整可用的url

    url = url + param

    print(url)

    response = urllib.request.urlopen(url=url)

    data = response.read()

    with open('./周杰伦.html','wb') as fp:

        fp.write(data)

    print('写入文件完毕')

5.通过自定义请求对象,用于伪装爬虫程序请求的身份。

之前在讲解http常用请求头信息时,我们讲解过User-Agent参数,简称为UA,该参数的作用是用于表明本次请求载体的身份标识。如果我们通过浏览器发起的请求,则该请求的载体为当前浏览器,则UA参数的值表明的是当前浏览器的身份标识表示的一串数据。如果我们使用爬虫程序发起的一个请求,则该请求的载体为爬虫程序,那么该请求的UA为爬虫程序的身份标识表示的一串数据。有些网站会通过辨别请求的UA来判别该请求的载体是否为爬虫程序,如果为爬虫程序,则不会给该请求返回响应,那么我们的爬虫程序则也无法通过请求爬取到该网站中的数据值,这也是反爬虫的一种初级技术手段。那么为了防止该问题的出现,则我们可以给爬虫程序的UA进行伪装,伪装成某款浏览器的身份标识。

上述案例中,我们是通过request模块中的urlopen发起的请求,该请求对象为urllib中内置的默认请求对象,我们无法对其进行UA进行更改操作。urllib还为我们提供了一种自定义请求对象的方式,我们可以通过自定义请求对象的方式,给该请求对象中的UA进行伪装(更改)操作。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#!/usr/bin/env python

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

import urllib.request

import urllib.parse

 

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

 

if __name__ == "__main__":

    #原始url中存在非ASCII编码的值,则该url无法被使用。

    #url = 'http://www.baidu.com/s?ie=utf-8&kw=周杰伦'

    #处理url中存在的非ASCII数据值

    url = 'http://www.baidu.com/s?'

    #将带有非ASCII的数据封装到字典中,url中非ASCII的数据往往都是'?'后面键值形式的请求参数

    param = {

        'ie':'utf-8',

        'wd':'周杰伦'

    }

    #使用parse子模块中的urlencode函数将封装好的字典中存在的非ASCII的数值进行ASCII编码

    param = urllib.parse.urlencode(param)

    #将编码后的数据和url进行整合拼接成一个完整可用的url

    url = url + param

    #将浏览器的UA数据获取,封装到一个字典中。该UA值可以通过抓包工具或者浏览器自带的开发者工具中获取某请求,从中获取UA的值

    headers={

        'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'

    }

    #自定义一个请求对象

    #参数:url为请求的url。headers为UA的值。data为post请求的请求参数(后面讲)

    request = urllib.request.Request(url=url,headers=headers)

 

    #发送我们自定义的请求(该请求的UA已经进行了伪装)

    response = urllib.request.urlopen(request)

 

    data=response.read()

 

    with open('./周杰伦.html','wb') as fp:

        fp.write(data)

    print('写入数据完毕')

相关推荐:

python爬虫beta版之抓取知乎单页面

Python 爬虫的工具列表大全

以上就是python爬虫如何爬取get请求的页面数据?(附代码)的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

Python之前需要学c语言吗

Python shell怎么运行

解决Python删除文件的权限错误问题

Python3实现购物车功能

Python实现注册登录系统

Python学习笔记——os模块

利用Python3实现linux的脚本功能

Python的pandas是什么?

Python 元类实例解析_Python

Python语言怎么解决汉诺塔问题

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...