2256003726 / lianjia-beike-spider-master

这是一个项目,来自于github,我魔改了一下。
Apache License 2.0
10 stars 3 forks source link

城市设置成北京后报错 #2

Open weihao20 opened 3 months ago

weihao20 commented 3 months ago

错误信息为:

当前爬取的日期为: 20240611
爬取的小区总数为: %s 0
City is: bj
OK, start to crawl 北京
Traceback (most recent call last):
  File "/home/xxx/spider/spider_v2/wjp/wjp_xiaoqu.py", line 32, in <module>
    spider.start()
  File "/home/xxx/spider/spider_v2/wjp/wjp_neighborhood_spider.py", line 104, in start
    districts = get_districts(city)
  File "/home/xxx/spider/spider_v2/lib/zone/district.py", line 39, in get_districts
    elements = root.xpath(CITY_DISTRICT_XPATH)
AttributeError: 'NoneType' object has no attribute 'xpath'

我观察到requests.get返回418,问题在爬取两三次后出现

2256003726 commented 3 months ago

418的问题我昨天也刚刚遇到,爬取的是上海的。之前从未出现过该问题。

这应该是被贝壳的反爬虫策略发现了,我观察到浏览器直接访问贝壳官网也报错418,几小时后就又恢复正常了。

建议设置一下休眠时间,将 base_spider.py 中的 RANDOM_DELAY 设置为 True

并在 areas_of_district = get_areas(city, district) 前增加 WjpBaseSpider.rand_delay()

修改建议

  1. 设置 RANDOM_DELAYTrue

    # base_spider.py
    RANDOM_DELAY = True
  2. areas_of_district = get_areas(city, district) 前增加 WjpBaseSpider.rand_delay()

    # 示例代码
    WjpBaseSpider.rand_delay()
    areas_of_district = get_areas(city, district)

通过这些修改,应该可以减少触发贝壳的反爬虫策略的概率。

2256003726 commented 3 months ago

418的问题我昨天也刚刚遇到,爬取的是上海的。之前从未出现过该问题。

这应该是被贝壳的反爬虫策略发现了,我观察到浏览器直接访问贝壳官网也报错418,几小时后就又恢复正常了。

建议设置一下休眠时间,将 base_spider.py 中的 RANDOM_DELAY 设置为 True

并在 areas_of_district = get_areas(city, district) 前增加 WjpBaseSpider.rand_delay()

修改建议

  1. 设置 RANDOM_DELAYTrue
    # base_spider.py
    RANDOM_DELAY = True
  2. areas_of_district = get_areas(city, district) 前增加 WjpBaseSpider.rand_delay()
    # 示例代码
    WjpBaseSpider.rand_delay()
    areas_of_district = get_areas(city, district)

通过这些修改,应该可以减少触发贝壳的反爬虫策略的概率。

设置睡眠时间,有时候还会报错418。

在睡眠的基础上,我又尝试了使用代理,解决了418问题。

我使用的clash代理工具,在配置文件的rules后面加上了DOMAIN-SUFFIX,ke.com,🔰国外流量,示例如下。

# 规则
rules:
  - DOMAIN-SUFFIX,ke.com,🔰国外流量

不同代理工具的配置文件可能略有不同,仅供参考。

weihao20 commented 3 months ago

418的问题我昨天也刚刚遇到,爬取的是上海的。之前从未出现过该问题。

这应该是被贝壳的反爬虫策略发现了,我观察到浏览器直接访问贝壳官网也报错418,几小时后就又恢复正常了。 我建议可以设置一下休眠时间,将 base_spider.py 中的 RANDOM_DELAY 设置为 True。 并可以在 areas_of_district = get_areas(city, district) 前增加 WjpBaseSpider.rand_delay()

修改建议

  1. 设置 RANDOM_DELAYTrue
    # base_spider.py
    RANDOM_DELAY = True
  2. areas_of_district = get_areas(city, district) 前增加 WjpBaseSpider.rand_delay()
    # 示例代码
    WjpBaseSpider.rand_delay()
    areas_of_district = get_areas(city, district)

通过这些修改,应该可以减少触发贝壳的反爬虫策略的概率。

设置睡眠时间,有时候还会报错418。

在睡眠的基础上,我又尝试了使用代理,解决了418问题。

我使用的clash代理工具,在配置文件的rules后面加上了DOMAIN-SUFFIX,ke.com,🔰国外流量,示例如下。

# 规则
rules:
  - DOMAIN-SUFFIX,ke.com,🔰国外流量

不同代理工具的配置文件可能略有不同,仅供参考。

我怀疑账号的cookie可能也有影响,可以使用多个账号的cookie随机爬取