温江网站建设,wordpress 点赞,图片网址生成器,怎么做资源类网站我们今天要爬取的网址为#xff1a;https://www.zhiliti.com.cn/html/luoji/list7_1.html
一、目标#xff1a;获取下图红色部分内容即获取所有的题目以及答案。
二、实现步骤。
分析#xff1a;
1#xff0c;首先查看该网站的结构。分析网页后可以得到#xff1a;
我们需…我们今天要爬取的网址为https://www.zhiliti.com.cn/html/luoji/list7_1.html
一、目标获取下图红色部分内容即获取所有的题目以及答案。
二、实现步骤。
分析
1首先查看该网站的结构。分析网页后可以得到
我们需要的内容是在该网页标签下详细内容链接在
的的href中。
但是这样我们最多只能获取这一页的内容别着急我们点击第二页看一下目标网址有什么变化我们发现目标网址最后的数字变成了2再看一下最后一页我们可以分析出最后那个数字即第几页所以我们待会可以直接用一个for循环拼接字符串即可。分析详细页面我们随便点击进入一个阅读全文同样分析网页结构。发现我们要的内容在一个块的
标签中我们在看一下其他题是不是也是这样的很明显是这样的所以我们只需要获取class为info-zi mb15下的标签下的内容即可。所以我们接下来开始实现。Lets 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,headersheaders)#更改网页编码--------不改会乱码res.encodingGB2312#创建一个BeautifulSoup对象soup BeautifulSoup(res.text,html.parser)#找出目标网址中所有的small标签#函数返回的是一个listans soup.find_all(small)#用于标识问题cnt 1#先创建目录mkdir(E:\\Python爬取的文件\\问题\\第 str(ii) 页\\)for tag inans:#获取a标签下的href网址string_ansstr(tag.a.get(href))#请求详细页面#返回我们需要的字符串数据string_write geturl(string_ans)#写文件到磁盘writedoc(string_write,cnt,ii)cnt cnt1print(第,ii,页写入完成)先拼接处目标网页url然后调用request去请求更改网页编码使用BeautifulSoup对html文档进行解析找出所有标签存入一个list然后遍历该list获取每一个标签里的得到详细页面的url之后我们调用geturl自定义函数下面讲解返回我们所需要的题目字符串最后调用writedoc写入文件。3得到详细页面的url后筛选目标字符串#根据详细页面url获取目标字符串defgeturl(url):#请求详细页面r requests.get(url, headersheaders)#改编码r.encoding GB2312soup BeautifulSoup(r.text, html.parser)#找出类名为 info-zi mb15 下的所有p标签ans soup.find_all([p, .info-zi mb15])#用来储存最后需要写入文件的字符串mlist for tag inans:#获取p标签下的string内容并进行目标字符串拼接mlistmliststr(tag.string)#返回目标字符串return mlist首先请求网页构建一个BeautifulSoup对象筛选出classinfo-zi mb15的对象下的标签内容返回类型为list遍历list将每个item的string拼接到目标字符串并返回。4将目标字符串写进文件#写文件defwritedoc(ss, i,ii):#打开文件#编码为utf-8with open(E:\\Python爬取的文件\\问题\\第 str(ii) 页\\问题 str(i) .txt, w, encodingutf-8) as f:#写文件f.write(ss)print(问题 str(i) 文件写入完成 \n)5创建指定目录defmkdir(path):#去除首位空格path path.strip()#去除尾部 \ 符号path path.rstrip(\\)#判断路径是否存在#存在 True#不存在 FalseisExists 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-8with open(E:\\Python爬取的文件\\问题\\第 str(ii) 页\\问题 str(i) .txt, w, encodingutf-8) as f:#写文件f.write(ss)print(问题 str(i) 文件写入完成 \n)#根据详细页面url获取目标字符串defgeturl(url):#请求详细页面r requests.get(url, headersheaders)#改编码r.encoding GB2312soup BeautifulSoup(r.text, html.parser)#找出类名为 info-zi mb15 下的所有p标签ans soup.find_all([p, .info-zi mb15])#用来储存最后需要写入文件的字符串mlist for tag inans:#获取p标签下的string内容并进行目标字符串拼接mlistmliststr(tag.string)#返回目标字符串returnmlist#获取目标网址第几页defgetalldoc(ii):#字符串拼接成目标网址testurl https://www.zhiliti.com.cn/html/luoji/list7_str(ii).html#使用request去get目标网址res requests.get(testurl,headersheaders)#更改网页编码--------不改会乱码res.encodingGB2312#创建一个BeautifulSoup对象soup BeautifulSoup(res.text,html.parser)#找出目标网址中所有的small标签#函数返回的是一个listans soup.find_all(small)#用于标识问题cnt 1#先创建目录mkdir(E:\\Python爬取的文件\\问题\\第 str(ii) 页\\)for tag inans:#获取a标签下的href网址string_ansstr(tag.a.get(href))#请求详细页面#返回我们需要的字符串数据string_write geturl(string_ans)#写文件到磁盘writedoc(string_write,cnt,ii)cnt cnt1print(第,ii,页写入完成)defmkdir(path):#去除首位空格path path.strip()#去除尾部 \ 符号path path.rstrip(\\)#判断路径是否存在#存在 True#不存在 FalseisExists os.path.exists(path)#判断结果if notisExists:#如果不存在则创建目录#创建目录操作函数os.makedirs(path)returnTrueelse:#如果目录存在则不创建并提示目录已存在returnFalsedefgetall():for i in range(1,31,1):getalldoc(i)if __name__ __main__:getall()四运行结果五总结一般网页的编码为utf-8编码但是这个网页就不一样编码为GB2312我第一次请求返回的是乱码如果python向一个不存在的目录进行写文件会报错所以写文件之前要先判断路径是否正确存在不存在就要创建路径请求头请使用下面这个#服务器反爬虫机制会判断客户端请求头中的User-Agent是否来源于真实浏览器所以我们使用Requests经常会指定UA伪装成浏览器发起请求headers {user-agent: Mozilla/5.0}