【问题标题】:Web Scrapping Python - Immoscout24 - Robot RejectionWeb Scraping Python - Immoscout24 - 机器人拒绝
【发布时间】:2022-06-26 06:10:15
【问题描述】:

所以我试图使用来自该站点的信息来制作一个数据科学项目。但可悲的是,当我尝试抓取它时,它阻止了我,因为它认为我是一个机器人。我在这里看到了几个帖子:Python webscraping blocked 但似乎 Immoscout 已经找到了解决此解决方法的方法。有人知道我怎么能解决这个问题吗?谢谢!

我的代码:

import requests
from bs4 import BeautifulSoup
import random

headers = {"User-Agent": "Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; NEO-X5-116A Build/JDQ39) AppleWebKit/534.30 ("
                         "KHTML, like Gecko) Version/4.0 Safari/534.30 , 'Accept-Language': 'en-US,en;q=0.5'"}


url = "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen?enteredFrom=one_step_search"

response = requests.get(url, cookies={'required_cookie': 'reese84=xxx'} ,headers=headers)
webpage = response.content
print(response.status_code)

soup = BeautifulSoup(webpage, "html.parser")
print(soup.prettify)

谢谢:)

【问题讨论】:

    标签: python web-scraping beautifulsoup request


    【解决方案1】:

    数据是通过 API 调用 json 响应作为 POST 方法动态生成的,您只能使用 requests 模块提取数据。所以,您可以按照下一个示例进行操作。

    import requests
    headers= {
        'content-type': 'application/json',
        'x-requested-with': 'XMLHttpRequest'
       }
    
    api_url = "https://www.immobilienscout24.de/Suche/de/berlin/berlin/wohnung-kaufen?pagenumber=1"
    
    jsonData = requests.post(api_url).json()
    
    for item in jsonData['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']:
        value=item['attributes'][0]['attribute'][0]['value'].replace('€','').replace('.',',')
        print(value)
    

    输出:

    4,350,000 
    285,000 
    620,000
    590,000
    535,000
    972,500
    579,000
    1,399,900
    325,000
    749,000
    290,000
    189,900
    361,825
    199,900
    299,000
    195,000
    1,225,000
    199,000
    825,000
    315,000 
    

    【讨论】:

    • 这真的很有帮助。我仍然不明白为什么它适用于 POST 而不是 GET。我有限的理解是 POST 是向网站发送“秘密/私人”消息,而 GET 是获取信息。我要谷歌更多。效果很好,谢谢!
    • @jpwitt13 当我们向服务器发送数据时,服务器也给我们反馈是发布请求,但 GET 直接 url 意味着什么都不需要改变。只需在 Google 上搜索什么是获取和发布请求?谢谢
    • 还有一个问题。我注意到你写了标题字典,但你没有使用它。为什么?只是好奇
    • 大多数情况下需要的头文件是强制性的,在这种情况下它可以在没有头文件的情况下工作,如果不工作则需要注入上面的头文件。不管。你可以注入更好的。requests.post(api_url,headers=headers).json()。您还会注意到它没有发送它们在 url 中覆盖的任何有效负载数据,这可能是它在不注入标头的情况下工作
    【解决方案2】:

    我已经尝试了代码,但得到的 内容为空,知道如何让它再次工作吗?

    【讨论】:

      猜你喜欢
      • 2022-12-30
      • 2011-03-08
      • 2018-08-24
      • 1970-01-01
      • 2018-04-02
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多