python获取网页的html编码类型,python3获取一个网页特定内容

咱们今天要爬取的网址为:https://www.zhiliti.com.cn/html/luoji/list7_1.htmlhtml

1、目标:获取下图红色部份内容

7d9f6b6e48062f2e6f37058afd0b1771.png

即获取全部的题目以及答案。python

2、实现步骤。

分析:

1,首先查看该网站的结构。浏览器

20f2b754ffd28be902fe40559601e6b3.png

676e84be45dc899ccdd5043e1671c049.png

分析网页后能够获得:服务器

咱们须要的内容是在该网页

标签下,详细内容连接在 的的href中。函数

可是这样咱们最多只能获取这一页的内容网站

e53ded9cdc1872cb03a52ce44ab67d19.png

别着急编码

咱们点击第二页看一下目标网址有什么变化url

4b33ad0a65faeb6206824b4ce4224e17.png

咱们发现目标网址最后的数字变成了2spa

再看一下最后一页3d

92c7b2a78f741f3fd6a1cf5082965e07.png

咱们能够分析出最后那个数字即第几页,因此咱们待会能够直接用一个for循环拼接字符串便可。

分析详细页面:

咱们随便点击进入一个阅读全文

ee9801c4c01c802d0c120c4bbaa79ff5.png

一样分析网页结构。

3f6ed4d0787cebc10e986d3931a9c9fe.png

发现咱们要的内容在一个块

标签中,咱们在看一下其余题是否是也是这样的

71139cae567c5a8c6982bbb0a1745cb5.png

很明显是这样的,因此咱们只须要获取class为info-zi mb15下的

标签下的内容便可。

因此咱们接下来开始实现。

Let's Go

实现:

1,获取全部页

defgetall():for i in range(1,31,1):

getalldoc(i)

i表示第i页,一共30页因此i从1变化到30,每次增长1。

2,获取当前页详细页面的链接

#获取目标网址第几页

defgetalldoc(ii):#字符串拼接成目标网址

testurl = "https://www.zhiliti.com.cn/html/luoji/list7_"+str(ii)+".html"

#使用request去get目标网址

res = requests.get(testurl,headers=headers)#更改网页编码--------不改会乱码

res.encoding="GB2312"

#建立一个BeautifulSoup对象

soup = BeautifulSoup(res.text,"html.parser")#找出目标网址中全部的small标签#函数返回的是一个list

ans = soup.find_all("small")#用于标识问题

cnt = 1

#先建立目录

mkdir("E:\\Python爬取的文件\\问题\\第" + str(ii) + "页\\")for tag inans:#获取a标签下的href网址

string_ans=str(tag.a.get("href"))#请求详细页面

#返回咱们须要的字符串数据

string_write =geturl(string_ans)#写文件到磁盘

writedoc(string_write,cnt,ii)

cnt= cnt+1

print("第",ii,"页写入完成")

先拼接处目标网页url,而后调用request去请求,更改网页编码,使用BeautifulSoup对html文档进行解析,找出全部标签,存入一个list,而后遍历该list,获取每个标签里的

获得详细页面的url以后咱们调用geturl(自定义函数下面讲解)返回咱们所须要的题目字符串,最后调用writedoc写入文件。

3,获得详细页面的url后筛选目标字符串

#根据详细页面url获取目标字符串

defgeturl(url):#请求详细页面

r = requests.get(url, headers=headers)#改编码

r.encoding = "GB2312"soup= BeautifulSoup(r.text, "html.parser")#找出类名为 info-zi mb15 下的全部p标签

ans = soup.find_all(["p", ".info-zi mb15"])#用来储存最后须要写入文件的字符串

mlist = ""

for tag inans:#获取p标签下的string内容,并进行目标字符串拼接

mlist=mlist+str(tag.string)#返回目标字符串

return mlist

首先请求网页构建一个BeautifulSoup对象,筛选出class=info-zi mb15的对象下的

标签内容,返回类型为list,遍历list,将每一个item的string拼接到目标字符串并返回。

4,将目标字符串写进文件

#写文件

defwritedoc(ss, i,ii):#打开文件

#编码为utf-8

with open("E:\\Python爬取的文件\\问题\\第" + str(ii) + "页\\"+"问题" + str(i) + ".txt", 'w', encoding='utf-8') as f:#写文件

f.write(ss)print("问题" + str(i) + "文件写入完成" + "\n")

5,建立指定目录

defmkdir(path):#去除首位空格

path =path.strip()#去除尾部 \ 符号

path = path.rstrip("\\")#判断路径是否存在

#存在 True

#不存在 False

isExists =os.path.exists(path)#判断结果

if notisExists:#若是不存在则建立目录

#建立目录操做函数

os.makedirs(path)returnTrueelse:#若是目录存在则不建立,并提示目录已存在

return False

三,最终python文件

importrequestsfrom bs4 importBeautifulSoupimportos#服务器反爬虫机制会判断客户端请求头中的User-Agent是否来源于真实浏览器,因此,咱们使用Requests常常会指定UA假装成浏览器发起请求

headers = {'user-agent': 'Mozilla/5.0'}#写文件

defwritedoc(ss, i,ii):#打开文件

#编码为utf-8

with open("E:\\Python爬取的文件\\问题\\第" + str(ii) + "页\\"+"问题" + str(i) + ".txt", 'w', encoding='utf-8') as f:#写文件

f.write(ss)print("问题" + str(i) + "文件写入完成" + "\n")#根据详细页面url获取目标字符串

defgeturl(url):#请求详细页面

r = requests.get(url, headers=headers)#改编码

r.encoding = "GB2312"soup= BeautifulSoup(r.text, "html.parser")#找出类名为 info-zi mb15 下的全部p标签

ans = soup.find_all(["p", ".info-zi mb15"])#用来储存最后须要写入文件的字符串

mlist = ""

for tag inans:#获取p标签下的string内容,并进行目标字符串拼接

mlist=mlist+str(tag.string)#返回目标字符串

returnmlist#获取目标网址第几页

defgetalldoc(ii):#字符串拼接成目标网址

testurl = "https://www.zhiliti.com.cn/html/luoji/list7_"+str(ii)+".html"

#使用request去get目标网址

res = requests.get(testurl,headers=headers)#更改网页编码--------不改会乱码

res.encoding="GB2312"

#建立一个BeautifulSoup对象

soup = BeautifulSoup(res.text,"html.parser")#找出目标网址中全部的small标签

#函数返回的是一个list

ans = soup.find_all("small")#用于标识问题

cnt = 1

#先建立目录

mkdir("E:\\Python爬取的文件\\问题\\第" + str(ii) + "页\\")for tag inans:#获取a标签下的href网址

string_ans=str(tag.a.get("href"))#请求详细页面

#返回咱们须要的字符串数据

string_write =geturl(string_ans)#写文件到磁盘

writedoc(string_write,cnt,ii)

cnt= cnt+1

print("第",ii,"页写入完成")defmkdir(path):#去除首位空格

path =path.strip()#去除尾部 \ 符号

path = path.rstrip("\\")#判断路径是否存在

#存在 True

#不存在 False

isExists =os.path.exists(path)#判断结果

if notisExists:#若是不存在则建立目录

#建立目录操做函数

os.makedirs(path)returnTrueelse:#若是目录存在则不建立,并提示目录已存在

returnFalsedefgetall():for i in range(1,31,1):

getalldoc(i)if __name__ == "__main__":

getall()

四,运行结果

bbcede07428e29a3b30c782f2ef09986.png

cdc848e43521c8dbe6e2651174d88add.png

bf1e412898005ccfed62c6d3de588257.png

五,总结

通常网页的编码为utf-8编码,可是这个网页就不同编码为GB2312,我第一次请求返回的是乱码,若是python向一个不存在的目录进行写文件会报错,因此写文件以前要先判断路径是否正确存在,不存在就要建立路径,请求头请使用下面这个

#服务器反爬虫机制会判断客户端请求头中的User-Agent是否来源于真实浏览器,因此,咱们使用Requests常常会指定UA假装成浏览器发起请求

headers = {'user-agent': 'Mozilla/5.0'}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值