关于#python#的问题:我这里就爬取不到信息

按照步骤一步步写的,可是爬取不到信息,不知道问题出在哪里,另外在哪里能学习到适用于new hand的爬虫知识

import requests
import json
import time
import openpyxl
global headers
#模拟浏览器发送请求并获取响应结果
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
def get_comments(productId,page):
    url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId={0}&score=0&sortType=5&page={1}&pageSize=10&isShadowSku=0&fold=1'.format(productId,page)
    resp=requests.get(url)
    requests.get(url, headers=headers)
    #print(resp.text) #响应结果进行显示输出
    s=resp.text.replace('fetchJSON_comment98(','')
    s=s.replace(');','')
    #将str类型的数据转成json格式的数据
    json_data=json.load(s)
    return json_data
#获取最大页数
def get_max_page(productId):
    dict_date=get_comments(productId,0)  #调用刚才写的函数,向服务器发送请求,获取字典数据
    return dict_date['maxPage']
#提取数据
def get_info(productId):
    #max_page=get_max_page(productId)
    max_page=10
    lst=[]
    for page in range(1,max_page+1): #循环执行次数
        #获取每页的商品评论
        comments=get_comments(productId,page)
        comm_lst=comments['comments']  #根据key获取value,根据comments获取到评论的列表(每页有10条评论)
        #遍历评论列表,分别获取每条评论中的内容,颜色,鞋码
        for item in comm_lst:  #每条评论又分别是一个字典,再继续根据key获取值
            content=item['content'] #获取评论中的内容
            color=item['productColor'] #获取评论中的颜色
            size=item['productSize'] #鞋码
            lst.append([content,color,size]) #将每条评论的信息添加到列表中
        time.sleep(3) #延迟时间,防止程序执行速度太快,被封IP
    save(lst)  #调用自己编写的函数,将列表中的数据进行存储

#用于将爬取到的数据存储到Excel中
def save(lst):
    wk=openpyxl.Workbook() #创建工作簿对象
    sheet=wk.active #获取活动表
    #遍历列表,将列表中的数据添加到工作表中,列表中的一条数据,在Excel中是一行
    for item in lst:
        sheet.append(item)
    #保存到磁盘上
    wk.save('销售数据.xlsx')

#测试
if __name__=='__main__':
    productId='100017087656'
    #print(get_max_page(productId))
    get_info(productId)

img

啥都没提示,错误也不知道,网址也不知道,你让人给你说啥

这样光看你的程序看不出来的,你需要把你的获取的关键信息输出来看看是不是与预想的一样,或者使用debug调试功能看每一步的数据是不是对的,才好定位问题所在,因为没有错误信息,不好定位bug ,因为没有数据有可能是被反爬了,也有可能是参数值设置的不准确。刚好春节,估计各位大神都在过年吃年夜饭,你的程序又没有给出具体的网址,代码不能运行,导致大家没空也没法给你调试,所以你自己先调试看看。

你的代码看起来基本正确,但是有一些可能导致爬取不到信息的原因。

请求头不正确,网站可能会检测出你是爬虫,导致响应结果为空。你可以尝试使用不同的请求头或者使用第三方库来模拟浏览器,如 Selenium。

网站可能有反爬虫机制,可能会对频繁请求进行限制,你可以尝试调整爬取频率。

数据是动态加载的,需要使用 JavaScript 来爬取,你可以尝试使用第三方库,如 Selenium 或者 PyQuery。

请求的 URL 是否正确,你可以尝试手动输入 URL 来验证。

你需要进行了登录或者输入验证码后才能爬取信息,你需要模拟登录和验证码输入过程。

不知道是不是你没有添加请求头的导致的不?

img


你可以去看看我的爬虫专栏,虽然不怎么详细哈!链接为:https://blog.csdn.net/qq_45404396/category_9687415.html?spm=1001.2014.3001.5482
当然。这位大佬的爬虫文章你也可以去看看,它的个人网站为:https://cuiqingcai.com/

光看程序看不出来啊,报错信息也没有

目前最新最全面的爬虫类教材~Python3网络爬虫开发实战(淘宝有)。
另:兄弟得把运行错误粘贴出来吖,不然大家怎么知道错误是啥

先用postman测试返回吗

你虽然设置了headers但貌似并没有使用啊

global headers
requests.get(url,headers = headers) # 这样才对

可以把返回的结果打印出来,看看是不是被拦截了
采纳

1、你写了一个headers但是你没有用到发请求上
2、没给具体网址,直接这样看看不出啥
3、这个报错很明显就是你的代码逻辑写错了,看提示就是16行的问题(你这个报错甚至不是和爬虫有关的,只是函数使用不当)
4、总的来说大佬不会浪费时间看你写的逻辑,想帮助你的哥们看不出来你是遇到了什么其它问题

首先,看你的抛错提示是,str没有read属性。
分析原因:你对requests语法结构不了解。具体体现在headers传入及返回数据进一步处理
解决方法:
首先,
resq=requests.get(url=url,headers=headers)
这里是要纠正你的语法,因为url和headers可以同时传入,所以只有url传入那句就没有用处了
其次,如果你需要json这种数据结果,那么你可以这样获取a=resq.json,而不是用str去转换,这是两种完全不同的数据结构,不能互转
再次,补充部分其他结构你可以print一下,去了解了解,a=resq.text文本格式,a=resq.json字典格式,
a=resq.content二进制格式这些都是玩爬虫常用的
最后,爬虫真的很好玩,慢慢学坚持过最开始的迷茫期后面就是阳光大道了,加油

import json
# 错误语句在第18 行
# 原 str没有read属性。s是字符串类型也是str
json_data=json.load(s)
# 改 字符串类型使用这个
json_data=json.loads(s)
# 还是报错就是你的文本问题,查看你的s内容是否正确,只接受json格式文本
# 如
json.loads('{"code":200,"message":"请求成功","data":"http://www.baidu.com"}')

主要是因为tn参数(你的代码写成n了,少了t)没传,接口返回404的html了,而不是返回查询结果内容。更正参数名称为tn就可以了。
做采集的时候参数名一定不能写错,还有一些请求头也需要加上,如user-agent,Referer,cookies之类的,因为接口可能会验证这些内容
有帮助麻烦点个采纳【本回答右上角】,谢谢~~

从你的报错信息来看,问题和爬虫没什么关系.
首先定位报错信息,修改函数用法
其次你的headers没有用在requests里面,应当修改resp=requests.get(url=url, headers=headers)
最后希望你检查一下你获取的到底是不是json数据,如果是的话那就可能是数据加密的问题了,可以尝试一下selenium的方法,这个在我的爬虫专栏里提到过,可以参考一下.
传送门:
爬虫专栏


import json
# 错误语句在第18 行
# 原 str没有read属性。s是字符串类型也是str
json_data=json.load(s)
# 改 字符串类型使用这个
json_data=json.loads(s)
# 还是报错就是你的文本问题,查看你的s内容是否正确,只接受json格式文本
# 如
json.loads('{"code":200,"message":"请求成功","data":"http://www.baidu.com"}')

我觉得是你的openxl问题 你 将openxl 换成pandas 吧