首页 > 数据库 > 数据库开发技术 > 盘点一个网络爬虫POST请求参数构造的问题
回复“书籍”即可获赠Python从入门到进阶共10本电子书
大家好,我是皮皮。
前几天在Python钻石交流群【胡韩】问了一个Python网络爬虫的问题,下图是截图:
代码如下所示:
import requests
import json
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s: %(message)s...')
class Myspider():
def __init__(self):
self.url = "http://www.xinfadi.com.cn/getPriceData.html"
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
self.data = {
"limit": 20,
"current": '',
"pubDateStartTime": "",
"pubDateEndTime": "",
"prodPcatid": "",
"prodCatid": "",
"prodName":""
}
self.formdata = []
def create_formdata(self):
for i in range(1,10):
self.data['current'] = i
self.formdata.append(self.data)
# print(self.formdata)
def get_html(self):
for item in self.formdata:
print(item)
html = requests.post(self.url,self.headers,item)
html = json.loads(html.text)
# print(html['current'])
def run(self):
self.create_formdata()
self.get_html()
if __name__ == "__main__":
spider = Myspider()
spider.run()
代码初步看上去好像没啥问题,但是结果就是不对。
这里【瑜亮老师】给了一个修改代码,如下所示:
修改后的代码如下:
import requests
import json
import logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s: %(message)s...')
class Myspider():
def __init__(self):
self.url = "http://www.xinfadi.com.cn/getPriceData.html"
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
self.formdata = []
for i in range(1,10):
self.data = {
"limit": 20,
"current": i,
"pubDateStartTime": "",
"pubDateEndTime": "",
"prodPcatid": "",
"prodCatid": "",
"prodName":""}
self.formdata.append(self.data)
def get_html(self):
for item in self.formdata:
# print(item)
html = requests.post(self.url,headers=self.headers,data=item)
print(html.json())
# html = json.loads(html.text)
# print(html)
def run(self):
self.get_html()
if __name__ == "__main__":
spider = Myspider()
spider.run()
运行之后,可以得到想要的结果:
后来粉丝还咨询了代码的错误原因所在,如下图所示:
相当于a=1,b=[a,a,a,a,a],a=2,b.append(a)你把a的值一修改,再添加进去,出现的结果还是全是2,所以抓到的结果就不对了。
大家好,我是皮皮。这篇文章主要盘点了一个Python网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【胡韩】提问,感谢【dcpeng】、【瑜亮老师】、【error】、【猫药师Kelly】给出的思路和代码解析,感谢【冫马讠成】、【萤火】等人参与学习交流。
大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting),应粉丝要求,我创建了一些高质量的Python付费学习交流群,欢迎大家加入我的Python学习交流群!
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

------------------- End -------------------
往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~
原文作者:Python爬虫与数据挖掘;如有侵权,请联系管理员删除。