python抓取一个网页的源代码并存储到本地文件

您所在的位置:网站首页 抓取网页图片的格式 python抓取一个网页的源代码并存储到本地文件

python抓取一个网页的源代码并存储到本地文件

2024-07-17 17:30| 来源: 网络整理| 查看: 265

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

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

#读取一个网页的源代码

import urllib.request def read_pageHtml(url): file = urllib.request.urlopen(url) data = file.read() return data url = "https://www.hao123.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.hao123.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.bilibili.com/v/technology/digital/?spm_id_from=333.334.primary_menu.47#/  是  https://www.bilibili.com/的子网页。则此处的referer=”https://www.bilibili.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.hao123.com" opener = browsersCamouflage() #安装opener为全局 urllib.request.install_opener(opener) data = urllib.request.urlopen(url).read() print(data)

 

3正则表达式

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3