python3获取网页内容_python3获取一个网页特定内容

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

一、目标:获取下图红色部分内容

1527703-20190105231536951-10246011.png

即获取所有的题目以及答案。

二、实现步骤。

分析:

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

1527703-20190105231610534-780715586.png

1527703-20190105231629116-1393023978.png

分析网页后可以得到:

我们需要的内容是在该网页

标签下,详细内容链接在 的的href中。

但是这样我们最多只能获取这一页的内容

1527703-20190105231646127-244503954.png

别着急

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

1527703-20190105231657689-2007504931.png

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

再看一下最后一页

1527703-20190105231712933-192971280.png

我们可以分析出最后那个数字即第几页,所以我们待会可以直接用一个for循环拼接字符串即可。

分析详细页面:

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

1527703-20190105231721741-1748430953.png

同样分析网页结构。

1527703-20190105231733858-180661204.png

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

标签中,我们在看一下其他题是不是也是这样的

1527703-20190105231801961-1387899368.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()

四,运行结果

1527703-20190105232422758-1827666342.png

1527703-20190105232433097-1902545257.png

1527703-20190105232443064-2093013090.png

五,总结

一般网页的编码为utf-8编码,但是这个网页就不一样编码为GB2312,我第一次请求返回的是乱码,如果python向一个不存在的目录进行写文件会报错,所以写文件之前要先判断路径是否正确存在,不存在就要创建路径,请求头请使用下面这个

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux64位steam,这下没得玩了! Steam无奈抛弃Linux用户

众所周知,Linux被公认为最安全的操作系统,近日,网络有消息传出Linux发行版Ubuntu确认将从今年下半年的19.10版本开始不再支持传统32位,而仅支持64位,而没有了32位系统的存在,许多游戏将不能支持。据了解&am…

解决问题:无法对 System程序集 添加Fakes程序集

为了在单元测试中指定DateTime.Now的值,我采用Microsoft Fakes技术的Shim。 主要参考了园里的http://www.cnblogs.com/FreeDong/p/3353111.html,编译时出了几千个警告,最终在“引用”中没有出现System.4.0.0.0.Fakes,当然了&#…

python抖音github_使用 Python 下载抖音无水印视频

抖音 APP 中保存到本地就是无水印版本的,所以头条的服务器肯定是保存有无水印版本的抖音视频的,所以只要找到接口地址就可以搞定。先在网上搜罗了一圈,确实有人已经做了解析,还提供了收费解析服务。 搜索之后发现又发现了同类型的…

linux 7 nano,Linux初學(CnetOS Linux7)之文本編輯器nano以及關機

1.nano文本編輯器[xiaohuilocalhost ~]$nano text.txt# 不管text.txt存不存在都沒有關系&#xff01;存在就開啟舊檔&#xff0c;不存在就開啟新檔GNU nano 2.3.1 File: text.txt<這個是游標所在處[ New File ]^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Te…

grep 和 sed:linux经常使用工具 amp; 基本正則表達式

grep 见链接&#xff1a;http://www.cyberciti.biz/faq/grep-regular-expressions/ sed參考文章&#xff1a;http://www.thegeekstuff.com sed工作原理 This is called as one execution cycle. Cycle continues till end of file/input is reached&#xff1a; 1. Read a ent…

远程主机http协议版本信息泄漏_Web基础之http协议

Http协议介绍&#xfffc;HTTP 全称&#xff1a;Hyper Text Transfer Protocol 中文名&#xff1a;超文本传输协议什么是超文本包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接&#xff0c;形成网状(Web)&#xff0c;因此又被称为网页(Web Page…

c语言opengles程序,OpenGL ES _ 着色器_程序

演示图你不知道这个东西&#xff0c;请不要看了,请看我的其他文章先了解一下O!学习目标掌握着色器程序的执行过程简单的例子uniform float t; // 时间uniform mat4 gl_ModelViewMatrix; // 模型视图矩阵attribute vec4 vel;const vec4 g vec4(0.0,-9.8,0.0) // 重力加速度void…

spring IOC加载流程

看了网上、书上很多对于spring IOC容器加载过程的分析。大多都只是粗略的讲一下加载流程。其实这样也不错&#xff0c;简单粗暴。清晰记得之前和一个前辈交流时他说的一句话&#xff1a;什么设计模式、设计框架都是扯淡&#xff0c;能实现这个功能就是最好的。其实这样的说法是…

pytorch 模型可视化_【深度学习】高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力...

作者&#xff1a;Eugene Khvedchenya 编译&#xff1a;ronghuaiyang导读只报告模型的Top-1准确率往往是不够的。将train.py脚本转换为具有一些附加特性的强大pipeline每一个深度学习项目的最终目标都是为产品带来价值。当然&#xff0c;我们想要最好的模型。什么是“最好的”…

c语言 %-20s,一次 Rust 和C语言的混搭

存在内存泄露extern crate libc;use libc::size_t;use libc::{FILE,c_char};use std::string;#[repr(C)]pub struct mntent {mnt_fsname :*mut c_char, /* 挂载的文件系统的名字 */mnt_dir :*mut c_char, /* 挂载点 */mnt_type :*mut c_char, /* 文件系统类型&#xff1a;ufs、…

KMP算法———模板

做出KMP字符串匹配算法心情也是好好哒&#xff0c;萌萌哒。 感谢黄学长&#xff0c;感谢栋栋&#xff01; #include<cstdio>#include<string>#include<iostream>using namespace std;int p[101];int main(){ string a,b; cin>>a>>b; int na.leng…

tstringlist怎么查看是否存在该数据_注意!研究生招生信息只公开1个月!应该怎么用?...

请注意&#xff01;全国硕士研究生招生信息公开平台&#xff08;以下简称“研招信息公开平台”&#xff09;已于2019年7月1日开放-2019年7月30日结束。招生信息怎么看&#xff1f;老师在线教你看懂研究生招生信息&#xff01;本篇目录&#xff1a;1.全国硕士研究生招生信息公开…

山东外贸职业学院王彩霞老师网上考试系统及c语言考试题库》,2015年山东外贸职业学院单招考试内容...

测试方式及内容1、夏季高考考生&#xff1a;文化考试、基本技能测试、面试(总分400分)(1)文化考试&#xff1a;考试形式为笔试&#xff0c;考试科目&#xff1a;语文、数学。两科一套卷子&#xff0c;分值为&#xff1a;语文100分、数学100分&#xff0c;总分200分&#xff0c;…

5.UiScrollable API 详细介绍

Tip&#xff1a; 1.扫动过程中如果界面停留在滚动条的中间部分会先回到起点再进行滚动 2.扫动过程中设置的步长长短决定划过内容的多少&#xff0c;步长越长滑过的内容就越少&#xff1b;步长越短划过的内容就越长 一、UiScrollable 类介绍 1.UiScrollable类说明 1&#xff09;…

delphi读取xml中的内容property name传递参数_Python 进阶知识全篇-XML 解析

什么是 XML&#xff1f;XML 指可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;&#xff0c;标准通用标记语言的子集&#xff0c;是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 XML 教程XML 被设计用来传输和存储数据。XML 是一套定…

c语言getline读取一行命令行,如何从文件的特定行中获取getline()? C ++

这个问题非常不清楚。您如何确定具体线&#xff1f;如果是第n行&#xff0c;最简单的解决方案就是调用getlinen次&#xff0c;扔掉除最后一个结果以外的所有结果&#xff1b;呼唤ignoren-1次可能会快一点&#xff0c;但我怀疑如果您总是读入相同的字符串(而不是构造一个每次都更…

12.UiAutomator 获取系统信息

一、Build构建信息 1.build类&#xff1a; Build类提供了硬件厂商、编号、序列号、SDK版本等重要信息。 类名&#xff1a;android.os.Build 常量名 说明 BOARD底层板名称BOOTLOADERBootloader版本号BRAND品牌CPU_ABICPU指令集CPU_ABI2CPU第二指令集DEVICE工业设计名称DISPLAY显…

c语言编写网页图形界面代码,「分享」C语言如何编写图形界面

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼贴吧内经常有人问C语言是不是只能用于字符终端界面开发&#xff0c;不能用于图形界面。大家也都有回答&#xff0c;需要其他的库。MFC&#xff0c;GTK&#xff0c;QT。本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大…

python 读取word_教你怎么使用 Python 对 word文档 进行操作

使用Python对word文档进行操作一、安装Python-docxPython-docx是专门针对于word文档的一个模块&#xff0c;只能读取docx 不能读取doc文件。说白了&#xff0c;python就相当于windows操作系统&#xff0c;QQ就是跑在windows操作系统上的软件&#xff0c;QQ最大的作用是可以去聊…

[国嵌攻略][084][信号同步编程]

进程同步 一组并发进程进行相互合作、相互等待&#xff0c;使得各进程按一定的顺序执行的过程称为进程间的同步。 进程同步与进程互斥 进程同步问题的关键在于生产者不需要获取信号量&#xff0c;消费者不需要释放信号量&#xff0c;所以信号量的初值设置为0。但是进程互斥问题…