如何设定旅游网站seo核心关键词,怎么免费创建网站,网站宣传的手段有哪些,河北项目网手机版目录
一#xff0c;网页开发者工具的使用
二、通过python发送请求
#xff08;一#xff09;、get
#xff08;二#xff09;、带参数的get
#xff08;三#xff09;、post
后续#xff1a;数据解析 一#xff0c;网页开发者工具的使用 我们可以用 requests 库…目录
一网页开发者工具的使用
二、通过python发送请求
一、get
二、带参数的get
三、post
后续数据解析 一网页开发者工具的使用 我们可以用 requests 库来从一个url或者说一个网址来爬取资源这里以百度主页和windows初始浏览器Microsoft Edge为例我们进入百度主页后按F12进入开发者模式我们常用的功能是元素和网络源代码除了反爬反加密外很少用。元素显示的是当前页面的实时代码网络则是能看到打开工具后当前网页的所有请求。 在弹出的开发者界面中选择网络然后刷新一下页面可以看到工具抓取了很多请求我们选中第一个请求。其中标头就是网络传输时http协议规定的格式。 常规里包含了目标url请求方法是我们着重需要看的地方。请求标头中要注意的有Cookie、Referer、User-Agent。Cookie主要用于管理登录状态、验证自动登录在一些登录的地方需要使用Referer指从哪个网址发起请求的可能和反爬有关。User-Agent则是表示了请求是从什么设备操作系统浏览器信息发出的一些网站会验证设备信息反爬。 响应就是服务器对这回请求发送的回信往往就是我们需要的数据。预览是返回数据的可视化一般如网页、图片或者代码就能显示预览。 很多请求还具有负载其实就是get请求时附带的参数或者post请求附带的数据。
二、通过python发送请求 常见的请求方式有get和post其中get是向服务器请求资源一般的访问资源都是get。post会向服务器提交数据像是百度翻译的待翻译文本提交就是post。而向一个网页提出请求是用get还是post具体就看上面标头中的请求方法。
一、get 现在我们就试试下载百度主页吧。
import requestsurl https://www.baidu.com
headers {# 用户代理某些网站验证用户代理微微改一下如果提示要验证码之类的使用它User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36,
}
with requests.get(urlurl,headersheaders) as resp:resp.encoding utf-8 # 当页面乱码改这里print(resp)with open(baidu.html, modew, encodingutf-8) as f: # 下载源码f.write(resp.text) 不加 headers也是可以的但请求到的东西会有差异某些网站甚至会无视请求或者要求验证码因为python默认的headers如下相当于告诉网站我是python。
with作用是执行完毕后自动执行resp.close()关闭链接 下载文件结果如下,没有百度图片是因为图片在其他请求中获得。 二、带参数的get 接下来我们试试下载这个网页为什么不用百度因为百度搜出来第二条结果过不了审而且搜狗参数少点但原理一样 通过开发者工具我们发现这个网页还是get请求但是url特别长 不过不要被吓到了打开负载页面比对一下你就会发现这些都相当于是附带的参数只是格式和编码原因看起来有点乱。上面的 queryi%E9%81%93i 其实就是utf-8编码下的 queryi道i 。 对于这种情况我们可以直接将url修改为这回请求的url可以适当裁剪只保留关键信息或者采用下面的方法
import requestsurl http://www.sogou.com/web
headers {# 用户代理某些网站验证用户代理微微改一下如果提示要验证码之类的使用它User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0,
}
params {query: i道i
}
with requests.get(urlurl, headersheaders, paramsparams) as resp:resp.encoding utf-8 # 当页面乱码改这里print(resp)print(resp.text)with open(sogou.html, modew, encodingutf-8) as f: # 下载源码f.write(resp.text) 下面是显示的结果看起来像是只有内容失去了格式这是因为搜狗网页html源代码就是这样的网页除了html源代码以外还能通过诸如css js脚本 等来动态的显示格式所以我们有时候在页面能看见的东西使用ctrlu查看页面源代码时却看不见因为这些东西是后面通过js发送的其他请求动态添加到页面的。 三、post 许多需要向服务器提交数据的行为比如上传文件论坛发帖等都是要post请求来修改服务器数据。这里就拿百度翻译为例子。百度翻译网页打开时发送的请求是get请求但提交待翻译文本时用的时post请求只用于练手请勿商用请勿过多访问 直接获取右面翻译结果有些太难了不亚于泼猴去梅山这里走条捷径顺着需要翻译的字一划能开启划译功能 从抓包工具中能看到多了两条请求我们看transapi的负载和响应: 可以看出这条就是我们需要的请求响应中[data][0][dst]所以我们通过以下python代码就可以获得百度翻译的结果
import requestsurl https://fanyi.baidu.com/transapi
headers {# 用户代理某些网站验证用户代理微微改一下如果提示要验证码之类的使用它User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0,
}
params {query: i道i,from: zh,to: en,source: txt,
}
with requests.post(urlurl, headersheaders, paramsparams) as resp:resp.encoding utf-8print(resp)print(eval(resp.text)[data][0][dst])
注意这里post返回的resp.text是str你可以使用eval或者resp.json()来转字典。这样我们就获取到结果了。 后续数据解析
改天写数据解析的三种工具正则、bs4、xpath详情见二、数据解析