合工大Python爬虫实验——按关键词爬取新闻网站

时隔一年,笔者又拿着实验报告来写篇博客。

实验原理

爬虫实验使用了Python中的requestsbeautifulsoupjsonpandas库,requests用于发送HTTP请求,beautifulsoup用于处理并解析响应的HTML文档,json用于解析json数据,pandas用于数据储存。

1HTTP请求构造

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP/1.1协议中共定义了八种方法来以不同方式操作指定的资源:

 GET HEAD POST PUT  DELETE TRACE OPTIONS CONNECT

爬虫大多用的就是GET或者POST

2、响应数据处理

对于请求的响应,一般情况下,有html json 两种格式。

HTML数据的解析原理:HTML以尖括号为标记,内部元素分为块元素与行内元素。利用beautifulsoup可以选择目标元素内的文本,爬取并存储即可完成数据解析。

Json数据解析:JSON类似于XML,是一种数据交换格式。JSON JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。解析后直接分析键值对即可提取目标信息。

实验设计

    从实验原理出发,模拟整个请求响应流程,防止爬虫被网站阻拦。系统流程与结构如下:

爬虫程序流程如下图:

    系统架构如下图:

关键问题及其解决方法

        爬取信息失败,未能获得正常响应

根据分析,修改header以及参数后发现,原因在于header中没有加入Referer这一键值对,导致网站将程序将程序的请求判定为爬虫。

    在一些网站信息的获取过程中,只有在指定的站点发起请求,服务器才会允许返回数据(这样可以防止资源被盗用在其他网站使用)。因此加入Rerferer使得问题解决。

    解决方法:在相关网站打开开发者工具,观察目标数据包的头部,如下:

根据实际情况合理构造头部即可获得正常响应。

        获得正常响应,但获得的数据并不符合关键词

针对这一问题,同样从url,headers以及参数方向考虑,由于urlheaders并不设计到关键词的值,因此考虑参数的值与格式。

    解决方法:

打开工具查看实际参数

构造相同参数进行测试

结果返回失败,于是考虑格式,发现南方新闻网参数的接收格式为application/x-www-form-urlencoded; charset=UTF-8,直接接收表单,不需要将参数json处理再传输,于是直接发送参数,然后即得到正确结果。

设计结果

参数设置:可根据实际需要,设置关键词

爬取结果展示:

南方新闻网:

新浪新闻:

爬虫源码如下:

南方新闻网爬虫源码:

import requests					
from bs4 import BeautifulSoup		
import pandas as pd					
import osdef fetchUrl(url, kw, page):# 请求头headers={"accept":"*/*","content-type": "application/x-www-form-urlencoded; charset=UTF-8","origin":"https://search.southcn.com","referer": "https://search.southcn.com/?keyword=chatgpt&s=smart&page={}".format(page),"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58",}# 请求参数payloads = {"project_id":5,"service_area":1,"sort":"smart","position": "","keywords": kw,"page_size":10,"page": page,"type": "normal",}# 发起 post 请求r = requests.post(url, headers=headers, data=payloads)return r.json()def parseJson(jsonObj):#解析数据records = jsonObj["data"]["news"]["list"]for item in records:# 解析了"文章id", "标题", "副标题", "发表时间", "编辑", "版面", "摘要", "链接"pid = item["id"]editor = item["editor"]content = item["digest"]displayTime = item["pub_time_detail"]subtitle = item["sub_title"]title = BeautifulSoup(item["title"], "html.parser").texturl = item["url"]yield [[pid, title, subtitle, displayTime, editor, content, url]]def saveFile(path, filename, data):# 如果路径不存在,就创建路径if not os.path.exists(path):os.makedirs(path)# 保存数据dataframe = pd.DataFrame(data)dataframe.to_csv(path + filename + ".csv", encoding='utf_8_sig', mode='a', index=False, sep=',', header=False )if __name__ == "__main__":# 起始页,终止页,关键词设置start = 1end = 5keyword = "chatgpt"# 保存表头headline = [["文章id", "标题", "副标题", "发表时间", "编辑", "摘要", "链接"]]saveFile("./data/", "southcn", headline)#爬取数据for page in range(start, end + 1):url = "https://search.southcn.com/api/search/all"html = fetchUrl(url, keyword, page)for data in parseJson(html):saveFile("./data/", "southcn", data)print("第{}页爬取完成".format(page))

新浪新闻网爬虫:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import os
from lxml import etreedef fetchUrl(url, kw,page):# 请求头headers = {"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","content-type": "application/x-www-form-urlencoded","origin": "https://search.sina.com.cn","referer": "https://search.sina.com.cn/news","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58",}# 请求参数payloads = {"q":kw,"c":"news","range":"all","size":10,"page":page}# 发起 post 请求r = requests.post(url, headers=headers, data=payloads)return rdef parseHtml(htmlObj):html_selector = BeautifulSoup(htmlObj.text,'lxml')news = html_selector.find_all("div",attrs = {'class': 'box-result clearfix'})# 解析数据for item in news:# 解析"文章标题", "摘要", “来源与发表时间",  "链接"title = item.find("a").textcontent = item.find("p",attrs = {"class":"content"}).textorigin = item.find("span",attrs = {"class":"fgray_time"}).texturl = item.find("a")['href']yield [[title, content,origin, url]]def saveFile(path, filename, data):# 如果路径不存在,就创建路径if not os.path.exists(path):os.makedirs(path)# 保存数据dataframe = pd.DataFrame(data)dataframe.to_csv(path + filename + ".csv", encoding='utf_8_sig',mode='a', index=False, sep=',', header=False)if __name__ == "__main__":# 起始页,终止页,关键词设置start = 1end = 3keyword = "chatgpt"# 保存表头headline = [["文章标题", "摘要", "来源与发表时间", "链接"]]saveFile("./data/", "sinanews", headline)# 爬取数据for page in range(start, end + 1):url = "https://search.sina.com.cn/news"html = fetchUrl(url, keyword, page)for data in parseHtml(html):saveFile("./data/", "sinanews", data)print("第{}页爬取完成".format(page))

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

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

相关文章

chatgpt赋能python:爬虫收集数据:提高SEO的重要工具

爬虫收集数据:提高SEO的重要工具 在数字化时代,数据仅仅是一种宝贵的资源,而且是Google的排名算法的关键组件之一。因此,SEO专家需要在确定目标市场时,采用不同的收集数据的工具和技术以获得必要的洞见,并…

Scrapy: 一个强大的 Python 爬虫框架--介绍--下载--启动!!

目录 Scrapy 影响力 介绍 主要特点 架构 运行流程 基本使用 安装 创建 Scrapy 项目 创建爬虫 爬虫包含的内容 运行爬虫 Scrapy 影响力 作为目前爬虫主流框架之一,Scrapy的影响力和应用范围非常广泛: 根据GitHub上的数据,Scrapy是一…

chatgpt赋能python:Python爬虫与炒股

Python爬虫与炒股 Python是一种非常流行的编程语言,在各方面都有着广泛的应用。其中之一就是利用Python爬虫技术进行炒股分析。 什么是Python爬虫 简单说,Python爬虫是一种通过编写程序,从互联网上抓取数据的技术。其核心在于模拟浏览器行…

python爬虫爬取今日头条_python 简单爬取今日头条热点新闻(一)

今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的; 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式network下很快能找到一个‘?category=new_hot...’字样的文件,查看该文件发…

基于python的数据爬虫学习与体会

文章目录 一、从Python编程基础中简述爬虫应用都会用到哪些pip模块以及对应的功能。pip install reqeustspip install bs4pip install pandaspip install seleniumpip install sqlalchemypip install pymongopip install gerapy_auto_extractorpip install gerapypip install s…

采用ChatGPT对强化学习A2C源代码添加注释说明

强化学习中的Actor-Critic算法是一种普遍经常用到的经典算法,Actor-Critic 翻译成“演员—评论家”方法。策略网络 π(a|s;θ) 相当于演员,它基于状态 s 做出动作 a。价值网络 q(s,a;w) 相当于评论家,它给演员的表现打分,量化在状…

【哈士奇赠书活动 - 25期】-〖Python自动化办公应用大全(ChatGPT版) 〗

文章目录 ⭐️ 赠书 - 《Python自动化办公应用大全(ChatGPT版)》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《Python自动化办公应用大全(ChatGPT版)》 ⭐️ 内容简介 本书全面系统地介绍了P…

ChatGPT常用的指令(prompts)系列八-写作、UI设计、招聘、网路安全

系列文章目录 内容翻译自:https://github.com/f/awesome-chatgpt-prompts,并加入自己的实践内容 1、 ChatGPT常用的提示语(prompts)系列一 2、 ChatGPT常用的提示语(prompts)系列二 3、 ChatGPT常用的提示语…

史上AI最高分!谷歌大模型创美国医师执照试题新纪录,科学常识水平媲美人类医生...

杨净 羿阁 发自 凹非寺量子位 | 公众号 QbitAI 史上AI最高分,谷歌新模型刚刚通过美国医师执照试题验证! 而且在科学常识、理解、检索和推理能力等任务中,直接与人类医生水平相匹敌。在一些临床问答表现中,最高超原SOTA模型17%以上…

首位华人女数学家获拉马努金奖!北大数院校友,陶哲轩恽之玮曾得过此奖

白交 发自 凹非寺量子位 | 公众号 QbitAI 又一位北大数院校友——唐云清,斩获拉马努金奖。 此前,00级校友张伟、恽神恽之玮,03级校友、浙大教授刘一峰曾获此奖。 △图源:George BergmanUC伯克利 除此之外,还有像陶哲轩…

chatgpt赋能Python-python_hanoi

Python Hanoi - 轻松解决汉诺塔问题 如果你是一位对算法有一定了解的程序员,那么你一定听说过汉诺塔问题。这个问题是计算机科学中最常见和最有趣的问题之一。这个问题听起来似乎很简单,但实际上很多程序员也会在这个问题上遇到困难。在这篇文章中&…

吴恩达的2022年终盘点:生成式AI、ViT、大模型

Datawhale干货 作者:吴恩达,斯坦福大学,编辑:智源社区 近日,吴恩达在圣诞节的《The Batch》特刊上发布了一年一度的年终盘点。在过去的一年,生成式AI迎来爆发式增长,由人工智能生成的图片在社交…

讯飞星火认知大模型 VS CHATGPT3.5

2023年5月6日,科大讯飞(002230.SZ)宣布将于当日举行“讯飞星火认知大模型”成果发布会。 与其他厂商的大模型发布相比,本次发布会具有三个特点:1.全程真机互动,现场实测、现场体验;2.技术先进性不是笼统表达&#xff…

AI测试|史上最全,细数AIGC在测试领域落地的困难点

一、引言&背景 自2022年由横空出世的ChatGPT引发的各类AIGC(Generative AI)爆发以来,人们对其在各个领域的应用潜力产生了极大的兴趣。在研发领域,各种研究已经证明了Github Copilot在研发效能提高上的积极作用。 在测试领域…

ChatPDF,来了!

转自:量子位 ChatGPT生产力,又上了一个台阶! 现在,甩一个PDF过去,它能自己读,你只负责提问就行。 一篇满是专业词汇的论文,它三言两语就能解释清楚,还都是中文大白话。 而且准确性很…

ChatPDF也来了!一键上传文件即可解读,复制粘贴都省了...

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉】微信技术交流群 明敏 发自 凹非寺转载自:量子位(QbitAI) ChatGPT生产力,再进阶! 现在,甩…

GPT-4 来了!这些开源的 GPT 应用又要变强了

作者:HelloGitHub-小鱼干 近日,在 GPT-3.5 发布的半年后,OpenAI 正式推出了大版本的 GPT-4,不同于 GPT-3 到 GPT-3.5 耗时两年,这次版本升级只用了半年。如果你对 OpenAI 不熟悉,答应我读下这篇《ChatGPT 会…

GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福

【导读】OpenAI的GPT-4在万众瞩目中闪亮登场,多模态功能太炸裂,简直要闪瞎人类的双眼。李飞飞高徒、斯坦福博士Jim Fan表示,GPT4凭借如此强大的推理能力,已经可以自己考上斯坦福了! 果然,能打败昨天的Open…

GPT4发布,有哪些升级和应用?

引言: GPT-4是OpenAI GPT系列研究最新里程碑,GPT-4接受图像和文本输入, 是一个大型多模态模型(接受图像和文本输入,输出为文本)。本文结合OpenAI官方Blog、技术报告微软Copilot发布会内容,详细介…

OpenAI推出GPT-4:功能强过ChatGPT 能玩梗图还能做网页

雷递网 雷建平 3月15日 在人们还在熟悉ChatGPT之际,人工智能企业OpenAI又推出了更强大的GPT-4,也被称为“王炸”产品。OpenAI CEO Sam Altman 称,GPT-4 是“我们迄今为止最强大、对齐最好的模型”。 OpenAI总裁Greg Brockman说:“…