噜啦噜啦噜呼呼呼 2024-09-18 09:08 采纳率: 66.3%
浏览 10

使用scrapy框架爬取网易社会招聘数据(ajax异步),如果换成requests爬取能成功,为什么scarpy显示502

使用scrapy框架爬取网易社会招聘数据(ajax异步),为什么显示这样,如果换成requests爬取能成功,为什么scarpy显示502,哪里有问题啊啊

img

import scrapy
import json
from jsonpath import jsonpath
from mySpider2.items import Myspider2Item


class WangyiSpider(scrapy.Spider):
    name = "wangyi"
    allowed_domains = ["163.com"]
    start_urls = ["https://hr.163.com/api/hr163/position/queryPage"]
    page = 1

    def start_requests(self):
        payload = {
            'currentPage': 1,
            'pageSize': 10
        }
        yield scrapy.Request(
            url=self.start_urls[0],
            callback=self.parse,
            method='POST',
            body=json.dumps(payload).encode('utf-8'),  # 要转化为json字符串
            dont_filter=True,   # 关闭去重过滤
            headers={'x-ehr-uuid':'88ee0a23-727f-4bf8-b96f-f1338ea1b0',
                     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
                     'Referer':'https://hr.163.com/job-list.html',
                     'Cookie':'_ntes_nnid=e8d24d6b67619adc709be368c107b5cd,1725195258462; _ntes_nuid=e8d24d6b67619adc709be368c107b5cd; hb_MA-8E16-605C3AFFE11F_source=www.baidu.com; hb_MA-AC55-420C68F83864_source=www.baidu.com; userName=; accountType='}
        )

    def parse(self, response):
        print(response.status)
        # 提取数据
        print('提取数据')
        jsons = response.body()  # json字符串
        data_lists = jsonpath(jsons, '$..list')  # 一个列表,每一项是json字符串
        print('-----', len(data_lists))
        print(data_lists)
        for data in data_lists:
            item = Myspider2Item()
            item['name'] = jsonpath(data, '$.name')
            work_type_mapping = {
                '0': '全职',
                '1': '实习',
                '2': '派遣'
            }
            item['workType'] = work_type_mapping[jsonpath(data, '$.workType')]
            item['place'] = jsonpath(data, '$.workPlaceNameList.0')[0]
            item['produce'] = jsonpath(data, '$.productName')[0]
            item['postType'] = jsonpath(data, '$.firstPostTypeName')[0]
            item['num'] = jsonpath(data, '$.recruitNum')[0]
            item['education'] = jsonpath(data, '$.reqEducationName')[0]
            item['ask'] = jsonpath(data, '$.requirement')[0]
            print(item['name'])
            yield item

        # # 模拟翻页
        # if not jsonpath(jsons, '$..lastPage')[0]:
        #     self.page += 1
        #     payload = {
        #         'currentPage': self.page,
        #         'pageSize': '10'
        #     }
        #     yield scrapy.Request(
        #         url=self.start_urls[0],
        #         callback=self.parse,
        #         method='POST',
        #         body=json.dumps(payload),
        #         headers={
        #             'User_Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"}
        #     )
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-18 19:31
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你给出的日志和代码来看,使用Scrapy爬取网易社会招聘数据遇到502 Bad Gateway错误。当你换成requests库尝试时却能够成功。下面我们来分析可能的原因及解决方案:

    1. Scrapy与requests处理机制不同:Scrapy是一个基于Twisted的网络爬虫框架,它有自己的请求处理机制和中间件系统。而requests库是一个简单的HTTP客户端库,用于发送HTTP请求。在某些情况下,Scrapy可能无法正确处理某些网站的反爬机制,而requests可以。但是基于你的描述,应该是大部分网站都能够正确处理Scrapy请求,只是在特定的网易API接口上出现这个问题。
    2. 可能的解决方法:首先确认是否所有参数设置都正确。确认headerscookies和其他请求参数与requests请求的完全相同。有时候网站的服务器可能针对某些特定的User-Agent或者请求头进行了限制。另外,尝试调整Scrapy的请求超时设置,有时候服务器响应超时也可能导致这种错误。

    针对你的代码和日志信息,我给出以下建议:

    • 确保所有的请求头(headers)和Cookie都正确无误,并且与requests请求的一致。
    • 检查是否所有的POST参数都正确无误地发送了。你可以尝试在Scrapy的请求中使用print(response.body)来查看实际发送的请求体是否正确。
    • 检查Scrapy的中间件设置,确保没有中间件干扰请求过程。特别是重试中间件和代理中间件。
    • 检查你的Scrapy版本是否是最新的,有时候升级到最新的版本可能解决问题。
    • 由于涉及到AJAX异步加载的内容,确保Scrapy能够正确处理这种情况。有时候可能需要使用Splash或者Selenium等工具来模拟浏览器行为。

    如果以上方法都不能解决问题,建议查看网易的API文档或者联系他们的技术支持来获取帮助,了解是否有特定的反爬策略或限制。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月18日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?