python 爬虫 网页下载

概念:什么是爬虫?

        爬虫别名:网络蜘蛛;网络,可以形成一个网,这个很好理解,从我们的百度进入,可以联系到很多很多网站,其实,百度就是一个大型的爬虫,我们的网站都是放在服务器上的,所以,我们爬取的就是服务器上的信息,一个网站,里面不止一个文件,可以包含着很多很多html,图片,视频等等,但是,如果我们一个一个去找,那么就会浪费很多时间,重复的事情,最适合的就是计算器去操作,所以爬虫就诞生了,爬虫就是帮我们在网络里面,自动的提取我们想要的信息,那么能不能具体一点呢?比如说,这个网站的求职信息,我们需要全部拿出来做一个统计分析,比如说,这个网站的不定时消息发送,我们需要实时的盯住它,抓取出来,等等,都可以使用我们的自动爬取程序就解决,而让我们人类解脱;

    哇,是不是感觉,爬虫的功能,真好,但是呢,这里也有一个缺点,如果这个爬虫无限制的去爬取,无限制的去访问我们的服务器,那么服务器岂不是要崩溃,所以,网站的创建者,自然要去识别这个请求信息,哪些是爬虫发出来的,这就是反爬虫技术,但是呢,道高一尺魔高一丈,我们也可以继续加深我们的爬虫程序,让这个程序更加像 一个人的操作;好的,废话不多说,我们开始我们的第一个爬虫程序!

1,python3里面自带有http协议请求模板,所以,我们可以直接导入python3的urllib模板进行操作(而Python2里面使用的是urllib2,所以这里,我们要区分一下;而,我们根据java web 的经验,我们知道这个网页的访问,实际上就是http协议,发送一个request 请求,同样,我们的urllib使用也是如此,导入它的request模板,使用它的urlopen方法,很形象是吗,打开,参数是什么,参数是url ,然后这个请求就发出了,发出去之后服务器会返回,同样也就返回到这个承接对象上,我们再用这个对象的read功能,就可以打印出来,也可以输入到文件里面;

from urllib import request



url='http://httpbin.org'

aa=request.urlopen(url)

print(aa.read())

返回结果:就是该页面的源代码,

 

1,数据的存入文件(网页下载)

from urllib import request



url='http://httpbin.org'

aa=request.urlopen(url)

bb=aa.read()

f=open('./baidu.html',"wb")

#第二种方法下载

request.urlretrieve('https://i.csdn.net/#/uc/profile','./csdn.html')

#第一种 手动下载;流输入

f.write(bb)

f.close()

print(aa.read())

2,文字的编码解码

from urllib import parse

from urllib.request import urlopen



values = {'username': '962457839@qq.com', 'password': '呼呼'}

data = parse.urlencode(values).encode('utf-8')  # 提交类型不能为str,需要为byte类型

print(data)

mm=parse.parse_qs('username=962457839%40qq.com&password=%E5%91%BC%E5%91%BC')//解码

print(mm)

url = 'http://www.hello.world/你好世界'

url_encode = parse.quote(url);//编码

print(url_encode)

url_a=parse.unquote(url_encode)//解码

print(url_a)

urlencode 传进去的是key=value,返回的是字符串,中间带=这种,而,parse_qs传进去的string,返回的字典;而quote可以直接编码字符串,,而unquote可以解码;

3,解释器,分割

url = "https://docs.python.org/3.5/library/urllib.parse.html?highlight=parse#module-urllib.parse"

result = parse.urlparse(url)

print(result)

print(result.query)  # 获取返回结果参数内容

print(parse.parse_qs(result.query))  # 结果转换成字典

print(parse.parse_qsl(result.query))  # 结果转换成列表

4,头信息的加入;

Request,参数加入,然后再使用urlopen打开,这个headers的取得,是通过浏览器,审查元素-》network-》然后找到一个请求,点开,找到headers,然后找到你们的信息,进行复制过来;

url = 'https://www.lagou.com/'

headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'

}

data = None

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

b= request.urlopen(req)

print(b.read())

5.实战,拉钩网爬取,解码显示:

url = 'https://www.lagou.com/jobs/list_Java?px=new&city=%E5%85%A8%E5%9B%BD#order'

headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'

}

data = None

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

b= request.urlopen(req)

print(b.read().decode('utf-8'))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值