首页技术文章正文

python抓取一个网页的源代码并存储到本地文件【黑马python培训】

更新时间:2019年07月26日 10时48分02秒 来源:黑马程序员论坛

1.1读取一个网页的源代码:

url:我们要爬取的网页链接(例如:url = “https://www.smpeizi.com”)

#读取一个网页的源代码

import urllib.request
def read_pageHtml(url):
    file = urllib.request.urlopen(url)
    data = file.read()
    return data

url = "https://www.pzzs168.com"
data = read_pageHtml(url)
print(data)


1.2将读取的网页内容存储到本地文件的两种常用办法:

方法一:

storagePath:存储的位置+文件名(例如:storagePath = "C:/Users/shijun/desktop/2.html")

data:抓取的网页信息


#将读取的网页以网页的形式存储到本地文件
def storageToLocalFiles(storagePath, data):
    fhandle = open(storagePath,"wb")
    fhandle.write(data)
    fhandle.close()

storagePath = "C:/Users/shijun/desktop/2.html"
data =    #我们获取的网页信息
storageToLocalFiles(storagePath, data)
运行结束之后我们就可以在桌面上看到一个网页了

方法二:

storagePath:存储的位置+文件名(例如:storagePath = "C:/Users/shijun/desktop/2.html")

url:我们要爬取的网页链接(例如:url = “https://www.idiancai.com”)


#将读取的网页以网页的形式存储到本地文件
def s(url, storagePath):
    import urllib.request
    filename = urllib.request.urlretrieve(url, filename=storagePath)




1.3一些常用指令

1.3.1:常用指令

file.info() : 读取当前环境相关信息

file.getcode():获取当前抓取网页的状态码

file.geturl():获取当前抓取网页的URL地址



1.3.2:编码问题

URL是有一定规则,或者说,我们的字符串是有一定的要求的(比如:只可以是字母、数字、下划线、部分符号等,如果有汉字的话,很可能就执行不了)。如果我们的字符串不符合要求,很可能就无法运行。那是不是没有解决办法呢。答案是NO!

我们可以用一个叫quote()的方法对字符串进行编码,然后就可以运行了。


import urllib.request

s = "hello everyone!"
data_quote = urllib.request.quote("hello everyone!")
print(data_quote)

data_unquote = urllib.request.unquote(data_quote)
print(data_unquote)
输出结果为:


hello%20everyone%21
hello everyone!




2浏览器的伪装

这里的伪装只是一些初步的伪装(日常应该够用了),主要是对用户身份(User-Agent)和信息来源网址(Referer)两部分进行伪装。

信息来源网址(Referer):

https://www.aiidol.com/v/technology/digital/?spm_id_from=333.334.primary_menu.47#/  是  https://www.aiidol.com/的子网页。则此处的referer=”https://www.aiidol.com/”



注意:data = urllib.request.urlopen(url).read()此处我们所获得的是二进制的字节码,有时候我们在对字节码进行编码的时候(data.decode(“utf-8)),发现会出现乱码的情况。这往往是我们在设置header的时候指定了"Accept-Encoding": "gzip, deflate, br",此时我们只需要将这行代码去掉就可以解决乱码问题。

"Accept-Encoding": "gzip, deflate, br"这个是用来设置从网站中接收的返回数据是否进行gzip压缩。如果设置了,就对数据进行压缩。而浏览器会自动的对数据进行gzip解压。这也就解释了为什么我们通过浏览器查看网页源代码没问题,自己爬取下来,然后打开就会出现乱码。


import urllib.request
#浏览器伪装
def browsersCamouflage():
    headers = {
        "Accept": "image/webp,image/apng,image/*,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "keep-alive",
        "Referer": "https://www.hao123.com/",
        "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"
    }
    #创建opener对象
    opener = urllib.request.build_opener()
    hdeadall = []
    #过循环遍历字典,构造headers信息
    for key, value in headers.items():
        item = (key, value)
        hdeadall.append(item)
    #设置opener对象的头信息
    opener.addheaders = hdeadall
  Return opener


url = "https://www.smpeizi.com"
opener = browsersCamouflage()
#安装opener为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
print(data)

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!