上海金融网站建设公司,如何网站开发语言,网站建设技术服务清单,大型网站 解决方案 技术Day2 - 1.requests第一血_哔哩哔哩_bilibili
requests作用#xff1a;模拟浏览器发请求
requests流程#xff1a;指定url - 发起请求 - 获取响应数据 - 持续化存储
爬取搜狗首页的页面数据
import requests# 指定url
url https://sogou.com
# 发起请求
resp…Day2 - 1.requests第一血_哔哩哔哩_bilibili
requests作用模拟浏览器发请求
requests流程指定url - 发起请求 - 获取响应数据 - 持续化存储
爬取搜狗首页的页面数据
import requests# 指定url
url https://sogou.com
# 发起请求
response requests.get(url)
# 获取响应数据,text返回字符串形式的响应数据
page_txt response.text
# 持久化存储
with open(./sogpu.html, w, encodingutf-8) as fp:fp.write(page_txt)
简易网页采集器
输入关键词后爬取搜索结果的页面信息 https://www.sogou.com/web?query%E8%B5%B5%E6%B5%A9%E7%84%B6_asfwww.sogou.com_astw01019900p40040100ieutf8fromindex-nologins_fromindexsut2106sst01705812059807lkt0%2C0%2C0sugsuv1705811188521571sugtime1705812059807
把url中多余的参数去掉
https://www.sogou.com/web?query%E8%B5%B5%E6%B5%A9%E7%84%B6
这里的中文变成了乱码无需处理当然想手动换成中文也行
为了使关键词可变需要处理url携带的参数封装到字典中
再把url中的参数删干净https://www.sogou.com/web
import requestsurl https://www.sogou.com/web
keyword input()
param {query: keyword
}
response requests.get(url, paramsparam)
page_txt response.text
filename keyword.html
with open(filename, w, encodingutf-8) as fp:fp.write(page_txt)
UA伪装
此次案例中需要介绍一种反扒机制——UA检测
UAUser-Agent请求载体的身份标识
UA检测门户网站的服务器会检测对应请求的载体身份标识如果检测到载体身份标识为某一款浏览器则认为是正常的请求否则认为是不正常的请求
UA伪装将对应的User-Agent封装到headers字典中
f12或者检查页面找到网络部分先清楚网络日志再刷新页面找到需要的请求对应的UA 然后把这个headers字典放入get请求中
import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
}
url https://www.sogou.com/web
keyword input()
param {query: keyword
}
response requests.get(url, paramsparam, headersheaders)
page_txt response.text
filename keyword.html
with open(filename, w, encodingutf-8) as fp:fp.write(page_txt)
破解百度翻译
爬取百度翻译中对应单词翻译的结果
由于我们不是想要爬取整个页面而是爬取页面中的部分信息经常需要用到数据解析
但不使用数据解析也能获取局部信息这次我们就不使用 从上面两张图我们可以看出输入单词后页面做了一个局部的刷新我们知道局部的刷新是可以通过Ajax实现的也就意味着我们在文本框中输入字符后会自动进行Ajax的请求发送Ajax请求成功后会对页面进行局部刷新
经过分析我们是不是应该利用抓包工具捕获一下对应的Ajax请求 点击XHRXHR中对应的是Ajax请求的数据包
输入dog 在xhr类型中一个个找 查看post请求携带的参数是d不清楚是什么东西所以接着往下看 三个sug包对应的是每输入一个字符后的Ajax请求我们需要的是dog的翻译结果所以要抓最后一个sug包 这样我们就拿到了请求的urlContent-Type这里是指我们输入一个字符后服务器端响应回来的是一组json串
分析总结
1post请求(携带了参数)
2响应数据是一组json数据
import requests
import jsonpost_url https://fanyi.baidu.com/sug
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36 HBPC/12.1.3.303
}
word input()
data {kw: word
}
response requests.post(urlpost_url, datadata, headersheaders)
# 响应数据是json数据如果继续使用.text获取的是一组字符串形式的json而.json返回的是一个objjson是什么对象就是什么对象在这里是字典
dict_obj response.json()
# 由于是字典对象所以不能直接write
filename ./ word .json
fp open(filename, w, encodingutf-8)
json.dump(dict_obj, fp, ensure_asciiFalse) # 字典中有中文不用ascii编码
未完待续...