爬虫专栏第三篇:Python 实战:运用 requests 突破京东商品评论获取难题(含 cookie 处理与编码设置技巧
简介:本文以京东商品评论为例,详细介绍了使用requests库获取网页数据的过程,包括从打开商品评价页面、抓包分析找到评论接口,到处理cookie参数、解决cookie字符串解析问题,以及设置正确的编码以成功获取评论数据,分享了实际操作中遇到的问题及解决方法,强调了经验积累和思考过程的重要性。
Python 实战:运用 requests 突破京东商品评论获取难题(含 cookie 处理与编码设置技巧
- 结构化数据json
- (第一步)打开京东商品评价页面:
- (第二步)打开开发者工具F12 / 右键检查
- (第三步)点击页码2 进行翻页,抓包找到comments,comments里面存放的内容就是评论
- (第四步):点击comment内部查看评论:
- (第五步)导入requests包
- (第六步)定义URL地址,从标头中找到:
- (第七步)定义headers模仿浏览器:
- (第八步)使用requests.get方法输出状态码发现是403,访问失败:
- (第九步)查看源网页的encoding,查看网页源代码:
- (第十步)找到charset:
- (第十一步)设置requests的encoding
结构化数据json
使用京东商品评论作为案例:
(第一步)打开京东商品评价页面:
(第二步)打开开发者工具F12 / 右键检查
(第三步)点击页码2 进行翻页,抓包找到comments,comments里面存放的内容就是评论
(第四步):点击comment内部查看评论:
(第五步)导入requests包
import requests
(第六步)定义URL地址,从标头中找到:
这里有一个很重要的经验:我们在设置url的时候一定要注意用三引号 ‘’’ ‘’’ 这种方式来存储字符串,因为随着网页地址做的越来越乱,里面经常会掺杂单引号和多引号,所以一定要使用三引号,确保了不会和内部的引号结合导致错误
url = '''https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1733138629967&body={"productId":100120884199,"score":0,"sortType":5,"page":1,"pageSize":10,"isShadowSku":0,"rid":0,"fold":1,"bbtf":"","shield":""}&h5st=20241202192349990;qhvevveyeukrlzi8;fb5df;tk03wc2421c8d18n08df4kavwbpSx_OECg7GO8UldqdyziHJZCelhlK_EDD6JxX6AduTSo3YYUgNxrBJ6OpJJEzAxT3Z;dcda45f65071de479f3b514e2b8285a95e3c04afef6002beb93b184a6d5a3b66;4.9;1733138629990;of7ruCLjzzZf9rIjLDIj6XETJrpjh7JjzHFN-i0R2WVNGSEOGSkR6ipjxjpPFipjLDrg3rJdJz1TIipjLDrgJTFS3T1TzrYT2XlSKiVf7PITKeFf6XIT5bodJiFTKmldJrJdJrEa-OFTGOEjLrJp-jZTHeIT3fVTGOYd6HYT0ble4XFf4jVdyX4T2joeFGISJipjxj5PKSEQKeFjLrJp-jZe9HIg3T0UG6VRFuWeDipjxjJOJrpjh7JjmCFeYKFbMmnNGeUTJrJdJ31QHyVT5ipjLDrgJj4f9G1WJrJdJTlPJrpjh7ZMLrJp7rJdJLYOJipjLrpjh7JjJrJdJPYOJipjLrpjh7pe3rJdJTYOJipjLrpjh7pfLDIj2XETJrpjLrJp-rojxjpe2iFjLrpjLDrg5Hojxj5f2iFjLrpjLDrg53pjxjJf2iFjLrpjLDrgJHIg6zpfJrJdJnYOJipjLrpjh7pfLDIjAOEjLrpjLDrg2rJdJfkQJrpjLrJp-rojxjpQJrpjLrJp-rojxjpS0ipjLrpjh-kjxjpS9WlOzWFjLrJp-3kjLDLjii1O6CHZcylSnG1QMaFRJrJdJjoPJrpjLrJpwqJdJrkPJrpjh7Jj3ToNL-oe1zVRUq5d7zpf6rpWdq5P0ulS9G1WJrJdJnVO4ipjLD7N;64b9caa95e7512f89ac585380406eac8abab5930a13f703cdd29d2274be7b983&x-api-eid-token=jdd03LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJIAAAAMTQ4NDSIQAAAAACVCLJS4VR4IT6YX&loginType=3&uuid=181111935.1125380558.1730258940.1733103676.1733138461.5'''
(第七步)定义headers模仿浏览器:
headers = {'user-agent':'''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'''}
(第八步)使用requests.get方法输出状态码发现是403,访问失败:
经过分析是因为京东商品的评论是登录才能看到的,所以需要传入cookies参数来告诉系统是 人登录的。
这里又要强调一个关于cookie知识点: requests.get要接受的参数是cookie字典,观察一下一小段cookie的内容
__jdu=1125380558;
shshshfpa=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; shshshfpx=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947;
他是由分号分隔 中间掺杂了 = ,类似于字典中的键值对,在处理他的过程中要尤其小心,我第一次处理的时候出现了错误,这是我的代码,我的问题出在了一个例子中:_tp=yYNqO517j66KL0XY4fYvlA==; 这个例子他的左右两部分被开头的=分隔,但是结束的时候出现了两个==,这样就导致我原本的语法没法切割
cookie_str = '''__jdu=1125380558; shshshfpa=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; shshshfpx=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; areaId=5; pinId=xGRVk0q9bbhtcVEnQbGC_A; pin=jd_oiDdnOJJqwbI; unick=jd_nj7lc2979wsk3w; _tp=yYNqO517j66KL0XY4fYvlA==; _pst=jd_oiDdnOJJqwbI; TrackID=1-PzT0uELU3bRlG8CRPZJXrdZiZvPmHitX8BrPfdu8mdCOR8780jr-aLiIm2B3ToPYH70hzBeuEhVrLJSQK9y3hROYw6_uIW8fCLP5kJqViU; thor=80B235B97D923749AC9BA1B00A935B026D7C157418F7906AE24C0FDDA9E90E35C754113B561D29793F91EC84A277671C277516847F25972F4D6CBD17AC094EDE622D4AB346D4B2EE90B370E3F9224F862B417D23D0406F72050C278AA68E9D44222305B3243FE8001DD04C96F559097E8FCEFC93AE24F43FBE9AFDCAEE67DB1677C9BA93106E3E7FC057F789808CA79AFA7101851A3516EB014322379794C654; light_key=AASBKE7rOxgWQziEhC_QY6yaXSnj08Pe07j6Y0Mo4HCHCxtDZyTAPJ7b4ZmfT-UvFiKyK6OU; 3AB9D23F7A4B3C9B=LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJI; unpl=JF8EALBnNSttX0oDAxwGSEVAGQ4AWwoOS0cDbmQDVVwPQldWGgAaEhR7XlVdWBRLFB9uZBRUVVNIVA4aAysSEXteXVdZDEsWC2tXVgQFDQ8VXURJQlZAFDNVCV9dSRZRZjJWBFtdT1xWSAYYRRMfDlAKDlhCR1FpMjVkXlh7VAQrAhsRFElUVVpZAXsWM2hXNWRVUEtQDR0yGiIRex8AAloNTB4HaSoFVF5cSV0EHwYSIhF7Xg; __jdv=76161171|baidu-pinzhuan|t_288551095_baidupinzhuan|cpc|0f3d30c8dba7459bb52f2eb5eba8ac7d_0_60f765bfacbe4f71a102700f82b03015|1733138461096; 3AB9D23F7A4B3CSS=jdd03LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJIAAAAMTQ4NDSIQAAAAACVCLJS4VR4IT6YX; flash=3_HpB4Dd8QzrbEDc1MKROlPKpgkFIYRTCOUClJEJOgxLXiy54H3W6xbV_JPaLuwvApuazFoJjz4jLh0juo7CUs_F219WuAn8cx6X3hqpreEvbUGIPofPYDwpQ_bxlHNV-aaxi2KgXM6ah9pp26NxTaeKVqDKHhoPQeIxEteKZ4fNa-yXC5lYPc; umc_count=1; mt_xid=V2_52007VwMSUVlaW1sbTRBsBmYGRVRcWVNGGB4QWxliBBpXQQhQXh5VTQ4ENVZBAFhRAF4ceRpdBmIfElFBWVFLH0ESXwVsAhpiX2hSah1OH10BZgAWU19eYl8eQB8=; token=c7f553c1cd4b73c8e6c1996627f3aa6d,3,962854; jsavif=1; __jda=181111935.1125380558.1730258940.1733103676.1733138461.5; __jdb=181111935.2.1125380558|5.1733138461; __jdc=181111935; ipLoc-djd=5-199-221-47311; shshshfpb=BApXSXPAShPZAs05JOW7Tk_9yah91CZaLBnJkjmhp9xJ1MreTPIG2'''
# cookies_dict = {}
# for cookie in cookie_str.split(";"):
# key, value = cookie.strip().split("=")
# cookies_dict[key] = value
后来我改成了下面的样子,他就能正确的完成字符串切割成键值对了:
import requestsurl = '''https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1733138629967&body={"productId":100120884199,"score":0,"sortType":5,"page":1,"pageSize":10,"isShadowSku":0,"rid":0,"fold":1,"bbtf":"","shield":""}&h5st=20241202192349990;qhvevveyeukrlzi8;fb5df;tk03wc2421c8d18n08df4kavwbpSx_OECg7GO8UldqdyziHJZCelhlK_EDD6JxX6AduTSo3YYUgNxrBJ6OpJJEzAxT3Z;dcda45f65071de479f3b514e2b8285a95e3c04afef6002beb93b184a6d5a3b66;4.9;1733138629990;of7ruCLjzzZf9rIjLDIj6XETJrpjh7JjzHFN-i0R2WVNGSEOGSkR6ipjxjpPFipjLDrg3rJdJz1TIipjLDrgJTFS3T1TzrYT2XlSKiVf7PITKeFf6XIT5bodJiFTKmldJrJdJrEa-OFTGOEjLrJp-jZTHeIT3fVTGOYd6HYT0ble4XFf4jVdyX4T2joeFGISJipjxj5PKSEQKeFjLrJp-jZe9HIg3T0UG6VRFuWeDipjxjJOJrpjh7JjmCFeYKFbMmnNGeUTJrJdJ31QHyVT5ipjLDrgJj4f9G1WJrJdJTlPJrpjh7ZMLrJp7rJdJLYOJipjLrpjh7JjJrJdJPYOJipjLrpjh7pe3rJdJTYOJipjLrpjh7pfLDIj2XETJrpjLrJp-rojxjpe2iFjLrpjLDrg5Hojxj5f2iFjLrpjLDrg53pjxjJf2iFjLrpjLDrgJHIg6zpfJrJdJnYOJipjLrpjh7pfLDIjAOEjLrpjLDrg2rJdJfkQJrpjLrJp-rojxjpQJrpjLrJp-rojxjpS0ipjLrpjh-kjxjpS9WlOzWFjLrJp-3kjLDLjii1O6CHZcylSnG1QMaFRJrJdJjoPJrpjLrJpwqJdJrkPJrpjh7Jj3ToNL-oe1zVRUq5d7zpf6rpWdq5P0ulS9G1WJrJdJnVO4ipjLD7N;64b9caa95e7512f89ac585380406eac8abab5930a13f703cdd29d2274be7b983&x-api-eid-token=jdd03LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJIAAAAMTQ4NDSIQAAAAACVCLJS4VR4IT6YX&loginType=3&uuid=181111935.1125380558.1730258940.1733103676.1733138461.5'''
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}# 处理cookie字符串
cookie_str = "__jdu=1125380558; shshshfpa=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; shshshfpx=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; areaId=5; pinId=xGRVk0q9bbhtcVEnQbGC_A; pin=jd_oiDdnOJJqwbI; unick=jd_nj7lc2979wsk3w; _tp=yYNqO517j66KL0XY4fYvlA==; _pst=jd_oiDdnOJJqwbI; TrackID=1-PzT0uELU3bRlG8CRPZJXrdZiZvPmHitX8BrPfdu8mdCOR8780jr-aLiIm2B3ToPYH70hzBeuEhVrLJSQK9y3hROYw6_uIW8fCLP5kJqViU; thor=80B235B97D923749AC9BA1B00A935B026D7C157418F7906AE24C0FDDA9E90E35C754113B561D29793F91EC84A277671C277516847F25972F4D6CBD17AC094EDE622D4AB346D4B2EE90B370E3F9224F862B417D23D0406F72050C278AA68E9D44222305B3243FE8001DD04C96F559097E8FCEFC93AE24F43FBE9AFDCAEE67DB1677C9BA93106E3E7FC057F789808CA79AFA7101851A3516EB014322379794C654; light_key=AASBKE7rOxgWQziEhC_QY6yaXSnj08Pe07j6Y0Mo4HCHCxtDZyTAPJ7b4ZmfT-UvFiKyK6OU; 3AB9D23F7A4B3C9B=LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJI; unpl=JF8EALBnNSttX0oDAxwGSEVAGQ4AWwoOS0cDbmQDVVwPQldWGgAaEhR7XlVdWBRLFB9uZBRUVVNIVA4aAysSEXteXVdZDEsWC2tXVgQFDQ8VXURJQlZAFDNVCV9dSRZRZjJWBFtdT1xWSAYYRRMfDlAKDlhCR1FpMjVkXlh7VAQrAhsRFElUVVpZAXsWM2hXNWRVUEtQDR0yGiIRex8AAloNTB4HaSoFVF5cSV0EHwYSIhF7Xg; __jdv=76161171|baidu-pinzhuan|t_288551095_baidupinzhuan|cpc|0f3d30c8dba7459bb52f2eb5eba8ac7d_0_60f765bfacbe4f71a102700f82b03015|1733138461096; 3AB9D23F7A4B3CSS=jdd03LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJIAAAAMTQ4NDSIQAAAAACVCLJS4VR4IT6YX; flash=3_HpB4Dd8QzrbEDc1MKROlPKpgkFIYRTCOUClJEJOgxLXiy54H3W6xbV_JPaLuwvApuazFoJjz4jLh0juo7CUs_F219WuAn8cx6X3hqpreEvbUGIPofPYDwpQ_bxlHNV-aaxi2KgXM6ah9pp26NxTaeKVqDKHhoPQeIxEteKZ4fNa-yXC5lYPc; umc_count=1; mt_xid=V2_52007VwMSUVlaW1sbTRBsBmYGRVRcWVNGGB4QWxliBBpXQQhQXh5VTQ4ENVZBAFhRAF4ceRpdBmIfElFBWVFLH0ESXwVsAhpiX2hSah1OH10BZgAWU19eYl8eQB8=; token=c7f553c1cd4b73c8e6c1996627f3aa6d,3,962854; jsavif=1; __jda=181111935.1125380558.1730258940.1733103676.1733138461.5; __jdb=181111935.2.1125380558|5.1733138461; __jdc=181111935; ipLoc-djd=5-199-221-47311; shshshfpb=BApXSXPAShPZAs05JOW7Tk_9yah91CZaLBnJkjmhp9xJ1MreTPIG2"
cookie_dict = {}
for cookie in cookie_str.split(";"):parts = cookie.split("=", 1) # 只分割一次,以处理可能包含多个=的情况if len(parts) == 2:key, value = partscookie_dict[key] = valueelse:print(f"Invalid cookie format: {cookie}")response = requests.get(url, headers=headers, cookies=cookie_dict)
print(response.status_code)
运行结果如下,证明我们已经可以正常访问了:
这些经验是其他的一些文章讲不出来的,人家把代码一堆,你一运行看似什么都学了 其实什么都没学到,没有思考过程,没有遇到问题,解决问题,没有这种错误的过程中,当你实际遇到问题还是不会。宝贵的是经验,是思考过程,如果您阅读到这里觉得有收获,希望您点赞 收藏 关注一下。后期我会把本专栏的文章转为付费专栏,不能怪我不开源,开源实在是没动力,人嘛他就是要恰饭的嘛,大家多多理解。
(第九步)查看源网页的encoding,查看网页源代码:
(第十步)找到charset:
发现是utf-8
(第十一步)设置requests的encoding
import requestsurl = '''https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1733138629967&body={"productId":100120884199,"score":0,"sortType":5,"page":1,"pageSize":10,"isShadowSku":0,"rid":0,"fold":1,"bbtf":"","shield":""}&h5st=20241202192349990;qhvevveyeukrlzi8;fb5df;tk03wc2421c8d18n08df4kavwbpSx_OECg7GO8UldqdyziHJZCelhlK_EDD6JxX6AduTSo3YYUgNxrBJ6OpJJEzAxT3Z;dcda45f65071de479f3b514e2b8285a95e3c04afef6002beb93b184a6d5a3b66;4.9;1733138629990;of7ruCLjzzZf9rIjLDIj6XETJrpjh7JjzHFN-i0R2WVNGSEOGSkR6ipjxjpPFipjLDrg3rJdJz1TIipjLDrgJTFS3T1TzrYT2XlSKiVf7PITKeFf6XIT5bodJiFTKmldJrJdJrEa-OFTGOEjLrJp-jZTHeIT3fVTGOYd6HYT0ble4XFf4jVdyX4T2joeFGISJipjxj5PKSEQKeFjLrJp-jZe9HIg3T0UG6VRFuWeDipjxjJOJrpjh7JjmCFeYKFbMmnNGeUTJrJdJ31QHyVT5ipjLDrgJj4f9G1WJrJdJTlPJrpjh7ZMLrJp7rJdJLYOJipjLrpjh7JjJrJdJPYOJipjLrpjh7pe3rJdJTYOJipjLrpjh7pfLDIj2XETJrpjLrJp-rojxjpe2iFjLrpjLDrg5Hojxj5f2iFjLrpjLDrg53pjxjJf2iFjLrpjLDrgJHIg6zpfJrJdJnYOJipjLrpjh7pfLDIjAOEjLrpjLDrg2rJdJfkQJrpjLrJp-rojxjpQJrpjLrJp-rojxjpS0ipjLrpjh-kjxjpS9WlOzWFjLrJp-3kjLDLjii1O6CHZcylSnG1QMaFRJrJdJjoPJrpjLrJpwqJdJrkPJrpjh7Jj3ToNL-oe1zVRUq5d7zpf6rpWdq5P0ulS9G1WJrJdJnVO4ipjLD7N;64b9caa95e7512f89ac585380406eac8abab5930a13f703cdd29d2274be7b983&x-api-eid-token=jdd03LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJIAAAAMTQ4NDSIQAAAAACVCLJS4VR4IT6YX&loginType=3&uuid=181111935.1125380558.1730258940.1733103676.1733138461.5'''
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}# 处理cookie字符串
cookie_str = "__jdu=1125380558; shshshfpa=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; shshshfpx=5f45e059-cb29-3d27-4dbb-0368cecf2751-1730258947; areaId=5; pinId=xGRVk0q9bbhtcVEnQbGC_A; pin=jd_oiDdnOJJqwbI; unick=jd_nj7lc2979wsk3w; _tp=yYNqO517j66KL0XY4fYvlA==; _pst=jd_oiDdnOJJqwbI; TrackID=1-PzT0uELU3bRlG8CRPZJXrdZiZvPmHitX8BrPfdu8mdCOR8780jr-aLiIm2B3ToPYH70hzBeuEhVrLJSQK9y3hROYw6_uIW8fCLP5kJqViU; thor=80B235B97D923749AC9BA1B00A935B026D7C157418F7906AE24C0FDDA9E90E35C754113B561D29793F91EC84A277671C277516847F25972F4D6CBD17AC094EDE622D4AB346D4B2EE90B370E3F9224F862B417D23D0406F72050C278AA68E9D44222305B3243FE8001DD04C96F559097E8FCEFC93AE24F43FBE9AFDCAEE67DB1677C9BA93106E3E7FC057F789808CA79AFA7101851A3516EB014322379794C654; light_key=AASBKE7rOxgWQziEhC_QY6yaXSnj08Pe07j6Y0Mo4HCHCxtDZyTAPJ7b4ZmfT-UvFiKyK6OU; 3AB9D23F7A4B3C9B=LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJI; unpl=JF8EALBnNSttX0oDAxwGSEVAGQ4AWwoOS0cDbmQDVVwPQldWGgAaEhR7XlVdWBRLFB9uZBRUVVNIVA4aAysSEXteXVdZDEsWC2tXVgQFDQ8VXURJQlZAFDNVCV9dSRZRZjJWBFtdT1xWSAYYRRMfDlAKDlhCR1FpMjVkXlh7VAQrAhsRFElUVVpZAXsWM2hXNWRVUEtQDR0yGiIRex8AAloNTB4HaSoFVF5cSV0EHwYSIhF7Xg; __jdv=76161171|baidu-pinzhuan|t_288551095_baidupinzhuan|cpc|0f3d30c8dba7459bb52f2eb5eba8ac7d_0_60f765bfacbe4f71a102700f82b03015|1733138461096; 3AB9D23F7A4B3CSS=jdd03LU2O4VYNC6FDOOYTDAL4YHXBKQJBF3RKS4JTAPR7H3BWAHA3KXCUV3W6HRB5Z55TRTS6KOYFHYBJXDTNKIAT3AWSJIAAAAMTQ4NDSIQAAAAACVCLJS4VR4IT6YX; flash=3_HpB4Dd8QzrbEDc1MKROlPKpgkFIYRTCOUClJEJOgxLXiy54H3W6xbV_JPaLuwvApuazFoJjz4jLh0juo7CUs_F219WuAn8cx6X3hqpreEvbUGIPofPYDwpQ_bxlHNV-aaxi2KgXM6ah9pp26NxTaeKVqDKHhoPQeIxEteKZ4fNa-yXC5lYPc; umc_count=1; mt_xid=V2_52007VwMSUVlaW1sbTRBsBmYGRVRcWVNGGB4QWxliBBpXQQhQXh5VTQ4ENVZBAFhRAF4ceRpdBmIfElFBWVFLH0ESXwVsAhpiX2hSah1OH10BZgAWU19eYl8eQB8=; token=c7f553c1cd4b73c8e6c1996627f3aa6d,3,962854; jsavif=1; __jda=181111935.1125380558.1730258940.1733103676.1733138461.5; __jdb=181111935.2.1125380558|5.1733138461; __jdc=181111935; ipLoc-djd=5-199-221-47311; shshshfpb=BApXSXPAShPZAs05JOW7Tk_9yah91CZaLBnJkjmhp9xJ1MreTPIG2"
cookie_dict = {}
for cookie in cookie_str.split(";"):parts = cookie.split("=", 1) # 只分割一次,以处理可能包含多个=的情况if len(parts) == 2:key, value = partscookie_dict[key] = valueelse:print(f"Invalid cookie format: {cookie}")response = requests.get(url, headers=headers, cookies=cookie_dict)
response.encoding = 'utf-8'
print(response.text)
我们现在已经能获得评论了
相关文章:
爬虫专栏第三篇:Python 实战:运用 requests 突破京东商品评论获取难题(含 cookie 处理与编码设置技巧
简介:本文以京东商品评论为例,详细介绍了使用requests库获取网页数据的过程,包括从打开商品评价页面、抓包分析找到评论接口,到处理cookie参数、解决cookie字符串解析问题,以及设置正确的编码以成功获取评论数据&#…...
HCIE:详解OSPF,从基础到高级特性再到深入研究
目录 前言 一、OSPF协议基本原理 简介 基本原理 OSPF路由器类型 OSPF网络类型 OSPF报文类型和封装 OSPF邻居的建立的维护 DR和BDR的选举 伪节点 LSDB的更新 OSPF的配置 二、OSPF的高级特性 虚连接(Virtual-Link) OSPF的LSA和路由选择 OSPF…...
第六十六条:谨慎使用本地方法
其实在java中有很多都是采用C或C语言实现的比如native这种的本地方法,感兴趣的可以找源代码看看。 Java Native Interface (JNI) 允许Java应用程序可以调用本地方法(native method),所谓本地方法是指使用本地程序设计语言…...
neo4j如何存储关于liquidity structure的层次和关联结构
在 Neo4j 中存储关于流动性结构(liquidity structure)的层次和关联结构非常适合,因为 Neo4j 是一个基于图的数据库,能够自然地建模和存储复杂的关系和层次结构。下面是如何在 Neo4j 中设计和实现这样的数据模型的详细步骤和示例。…...
45 基于单片机的信号选择与温度变化
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采用DS18B20检测温度,通过三种LED灯代表不同状态。 采用DAC0832显示信号脉冲,通过8位数码管显示温度。 信号脉冲可以根据两个按键分别调整为正弦…...
2、Three.js初步认识场景Scene、相机Camera、渲染器Renderer三要素
三要素之间关系: 有了虚拟场景Scene,相机录像Camera,在相机小屏幕上看到的Renderer Scene当前空间 Mesh人在场景 Camera相机录像 Renderer显示器上 首先先描述下Scene: 这个场景为三要素之一,一切需要展示的东西都需…...
Java基础面试题06:hashCode()和equals()方法的重要性体现在什么地方?
前言 Java中的hashCode()和equals()方法看似是干同一件事,但它们的使用场景和作用却大有不同。为了让程序更高效、更准确地运行,我们需要对这两者有深入的了解,并掌握它们的重写规则。 hashCode()和equals()的基础知识 什么是hashCode&…...
Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型
创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…...
C#基础之方法
文章目录 1 方法1.1 定义方法1.2 参数传递1.2.1 按值传递参数1.2.2 按引用传递参数1.2.3 按输出传递参数1.2.4 可变参数 params1.2.5 具名参数1.2.6 可选参数 1.3 匿名方法1.3.1 Lambda 表达式1.3.1.1 定义1.3.1.2 常用类型1.3.1.3 Lambda 表达式与 LINQ1.3.1.4 Lambda 表达式的…...
Pytest框架学习19--参数化2
1、数据源是yaml 安装yaml,使用safe_load方法读取文件,解析出数据 pip install PyYAML # test_data.yaml test_case_1:a: 2b: 3expected_result: 5test_case_2:a: -1b: 10expected_result: 9test_case_3:a: 0b: 0expected_result: 0# test_code.pyimpor…...
VSCode中“Run Code”运行程序时,终端出现中文乱码解决方法
问题描述 在VSCode中“Run Code”运行程序时,终端输出结果出现中文乱码现象: 解决方法 1. 检查系统cmd的默认编码 查看Windows终端当前编码方式的命令: chcp输出结果是一段数字代码,如936,这说明当前的cmd编码方式…...
HarmonyOS 5.0应用开发——列表(List)
【高心星出品】 文章目录 列表(List)列表介绍列表布局设置主轴方向设置交叉轴方向 列表填充分组列表填充 滚动条位置设置滚动位置滚到监听 列表项侧滑 列表(List) 列表介绍 列表作为一种容器,会自动按其滚动方向排列…...
C++设计模式外观模式(Facade)
什么是桥接模式? 桥接模式(Bridge Pattern)是一种结构型设计模式,它的核心目的是解耦抽象部分和实现部分,让它们可以独立变化。在简单的描述中,桥接模式可以让你在不修改原有代码的情况下,分别…...
《Python基础》之Numpy库
目录 简介 一、创建数组 1、根据列表创建数组 2、创建全0数组 3、创建全1数组 4、创建单位矩阵 5、创建随机数数组 二、查看数组的属性 三、 数组的操作 1、索引和切片 2、变形 3、拼接 (1)、vstack() 纵向拼接 (2)、hs…...
Python异步编程与API调用:提高效率与性能的实践指南
引言 在当今的软件开发领域,异步编程已成为提高应用程序性能和响应能力的关键技术。特别是在处理I/O密集型任务,如API调用时,异步编程能够显著提升效率。本文将通过一个具体的示例——使用Python的asyncio和aiohttp库来异步调用APIÿ…...
Zookeeper3.4.14集群安装
Zookeeper3.4.14三节点集群安装 为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群。(在一个节点模拟三节点,真实的三节点把ip替换一下即可,按照hadoop案件把网络打…...
电机驱动MCU介绍
电机驱动MCU是一种专为电机控制设计的微控制器单元,它集成了先进的控制算法和高性能的功率输出能力。 电机驱动MCU采用高性能的处理器核心,具有快速的运算速度和丰富的外设接口。它内置了专业的电机控制算法,包括PID控制、FOC(Fi…...
Python 面向对象编程详解
Python 面向对象编程详解 面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在 Python 中,面向对象编程非常强大,允许开发者通过类(class)和对象(object)来模…...
网络技术-不使用K8S情况下哪些方法可搭建服务链编排
在不使用Kubernetes(k8s)(或不使用Docker环境技术的)情况下,搭建服务链编排环境需要依赖其他服务编排和容器化技术,或者采用传统的虚拟机和服务管理方法。以下是一些可能的解决方案: 一、使用其…...
JVM_总结详解
1、CPU和内存的交互 了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】 有篇很棒的文章,从cpu讲到内存模型:[什么是java内存模型?] 在计算机中,cpu和内存的交互最…...
go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源
go Pool Pool用于展示如何使用有缓冲的通道实现资源池,来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况(如共享数据库连接或者内存缓冲区)下非 常有用。如果goroutine需要从池里得到这些资…...
初级数据结构——邻接表
目录 前言一、定义与结构二、特点与性质三、构建方式四、操作与应用五、代码模版六、经典例题[1.——LCP 07. 传递信息](https://leetcode.cn/problems/chuan-di-xin-xi/description/)代码题解 [2.——547. 省份数量](https://leetcode.cn/problems/number-of-provinces/)代码题…...
思维导图+实现一个登录窗口界面
QQ2024122-205851 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel, QVBoxLayout# 封装我的窗口类 class LoginWidget(QWidget):# 构造函数def __init__(self):# 初始化父类su…...
多级缓存设计实践
缓存是什么? 缓存技术是一种用于加速数据访问的优化策略。它通过将频繁访问的数据存储在高速存储介质(如内存)中,减少对慢速存储设备(如硬盘或远程服务器)的访问次数,从而提升系统的响应速度和…...
ElasticSearch学习笔记一
目录 1.ElasticSearch-Head如何启动 2.ElasticSearch-Head创建索引 2.1创建索引时的“分片数”和“副本数”是什么意思? 类比 1:图书馆的书架与备份 类比 2:快递分拣中心与包裹副本 总结 编辑 2.2如何查看现有索引的分片数和备份数 …...
A058-基于Spring Boot的餐饮管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
代码设计:设计模式:应对变化
文章目录 概述1.拆分代码2.解耦3.扩展总结概述 代码的设计模式主要为了应对变化 三种代码设计中应对变化的方式 1.拆分代码 2.解耦 3.扩展 1.拆分代码 减小变化对代码的影响 需要拆分代码的几种情况 1.类或方法的代码量巨大,导致代码可读性降低 2.存在复杂的代码,如…...
《Vue 路由导航:打造流畅的单页应用一》
一、Vue Router 简介 Vue Router 是什么? Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页面应用并实现页面间导航。它基于 Vue 的组件系统构建,通过配置路由将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面…...
【xshell连接失败】
xshell用pem连接失败 Warning: Identity file ”open_api_test.ssh not accessible: No such file or directory. Warning: Identity file open_api_test2.pem not accessible: No such file or directory. Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 搞了半…...
说说Elasticsearch拼写纠错是如何实现的?
大家好,我是锋哥。今天分享关于【说说Elasticsearch拼写纠错是如何实现的?】面试题。希望对大家有帮助; 说说Elasticsearch拼写纠错是如何实现的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…...
实例讲解MATLAB绘图坐标轴标签旋转
在进行绘图时需要在图片上添加上做标轴的标签,但是当数据量比较多时,例如一天24小时的数据,这时把每个小时显示在左边轴的标签上,文字内容放不下,因此需要将坐标轴标签旋转一定的角度,这样可以更好在图形上…...
Win10+Ubuntu20.04双系统重装Ubuntu22.04单系统
从去年 8 月美化 Ubuntu 系统后一直存在内核错误问题,但因为大部分功能还能正常使用,只是在 apt 时报错,所以一直逃避不想重装,直到最近 12 月新的开始,恰好设置的界面打不开得重装 gnome ,所以下定决心重装…...
eBPF:现代Linux的强大内核扩展技术
eBPF:现代Linux的强大内核扩展技术 eBPF(Extended Berkeley Packet Filter)是一项变革性的技术,它为Linux内核提供了一个灵活的、可编程的方式来处理数据包过滤、网络监控、安全性和系统性能分析等多种任务。 1. eBPF简介 1.1 …...
深度学习-52-AI应用实战之基于Yolo8的目标检测自动标注
文章目录 1 YOLOv81.1 YOLOV8的不同版本1.2 可检测类别1.3 数据说明1.4 网络结构1.5 算法核心步骤2 目标检测的基本原理2.1 安装yolov8(cpu版本)2.2 图片检测2.3 视频检测2.4 自动标注2.5 保存标注结果3 参考附录1 YOLOv8 YOLOv8是一种前沿的计算机视觉技术,它基于先前YOLO版…...
人工智能工作流程概述:从数据到智能决策
目录 一、引言 二、人工智能工作流程概述 (一)数据收集 (二)数据预处理 (三)模型选择与设计 (四)模型训练 (五)模型评估 (六)模…...
Jenkins升级到最新版本后无法启动
1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…...
.net core MVC入门(三)——Product页面添加
文章目录 项目地址一、Product数据库准备 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、Product数据库准备 添加Product的EF上下文 public DbSet<Category> Categories { get; set; …...
【Java基础】笔记
List和ArrayList区别 public class Arrays_BugDemo {public static void main(String[] args){/** List 是一个固定大小的列表,虽然可以进行查询操作,但不支持添加、删除或修改元素。* 如果需要一个可以动态修改的列表,可以使用 ArrayList 进…...
Docker 进阶指南:常用命令、最佳实践与资源管理
Docker 进阶指南:常用命令、最佳实践与资源管理 Docker 作为一种轻量级的容器化技术,已经成为现代软件开发和部署不可或缺的工具。本文将为您深入介绍 Docker 的常用命令、最佳实践以及如何有效管理容器资源,帮助您更好地在 Ubuntu 22.04 或…...
C++编写静态库
1、新建项目创建静态库staticLib1. demoStaticLib.h #pragma once class ArrayTool { public:int Max(const int* lpHead, const int nLength);int Sum(const int* lpHead, const int nLength); }; demoStaticLib.cpp #include "pch.h" #include "demoStati…...
oracle数据库日常操作
1、执行SQL语句后不显示PL/SQL procedure successfully completed set feedback off; 2、显示实例名称 echo "set sqlprompt \"_user_connect_identifier> \"" >> $ORACLE_HOME/sqlplus/admin/glogin.sql 3、客户端尝试连接到服务器时发生超时 …...
行驶证 OCR 识别API接口的影响因素
一、影响因素 (一)证件质量与图像质量 行驶证的质量对OCR 识别 API 界面的效果有重要影响。清晰的文件可以使识别系统准确地捕获文本信息,而模糊的文本可能会导致识别错误。而且不同地区、不同年份的行驶证在字体、排版、格式等方面可能存在差异,甚至可…...
什么是TCP/IP和UDP
TCP/IP和UDP都是网络协议,用于不同计算机或设备之间的通信。它们的作用是定义数据如何在网络上传输,但它们在传输方式、可靠性和效率上有显著的区别。 1. TCP/IP TCP/IP(传输控制协议/互联网协议,Transmission Control Protocol…...
1074 Reversing Linked List (25)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K3, then you must output 3→2→1→6→5→4; if K4, you must output 4→3→2→1→5→6. Input Specif…...
layui table 纵向滚动条导致单元格表头表体错位问题
我用的时layui2.6.8版本 历史项目维护,bug给我让我做了,本来利用前端手段强解决,后来发现很多table 找了解决办法 打开layui-v2.6.8/lay/modules/table.js 如果打开后时压缩的代码 直接搜索 e.find(".layui-table-patch") …...
算法基础 - 求解非线性方程(牛顿法)
文章目录 1. 前言2. 牛顿迭代算法2.1. 基本思想2.2. 如何求解 x12.3. 如何求解 x22.4. 收敛性2.5. 编码实现2.5.1. 递归实现2.5.2. 非递归实现 1. 前言 前文介绍了如何使用“高斯消元法”求解线性方程组。本文秉承有始有终的态度,继续介绍“非线性方程”的求解算法。…...
[C#]C#实现数字到人民币大写金额的转换
在软件开发中,将数字转换成人民币大写形式的需求通常出现在需要生成财务报表、发票、收据、账单等正式文档的场景中。这些文档往往需要遵循一定的格式和规范,以确保信息的准确性和可读性,特别是在处理与金钱相关的数据时。 比如: …...
Base64.cv:高效安全的在线Base64转换工具详解
在日常开发中,Base64编解码是一个非常常见的需求。本文将介绍一款优秀的在线Base64转换工具:Base64.cv。 工具特点 1. 性能优势 采用浏览器原生API,转换速度快本地运算,无服务器延迟支持大容量文本处理 2. 安全性 纯客户端处…...
前端面试热门题(二)[html\css\js\node\vue)
Vue 性能优化的方法 Vue 性能优化的方法多种多样,以下是一些常用的策略: 使用v-show替换v-if:v-show是通过CSS控制元素的显示与隐藏,而v-if是通过操作DOM来控制元素的显示与隐藏,频繁操作DOM会导致性能下降。因此&am…...
施耐德电气:多维解构AI挑战,引领产业创新变革
CSDN 看到,大模型正在掀起一场智能化革命,带来计算、开发、交互三大范式全面升级和转换,其中 AI 计算范式正在从图灵、冯诺伊曼计算范式转为神经网络计算范式。AI 技术仍在快速发展,AI 算力基础设施的数据中心如果仍走“堆资源、堆…...