代码之家  ›  专栏  ›  技术社区  ›  FutureCake

来自python的url请求被服务器“阻止”

  •  1
  • FutureCake  · 技术社区  · 4 年前

    我写了一个超级简单的脚本,从一个网站(最多100个条目)中刮取一点数据供个人使用(这样我就可以快速比较)。

    但是每当我收到请求的页面时,我会得到一个不同的页面,说他们认为我不是一个真正的用户(这是真的)。我该如何规避?因为如果我在一个新的隐姓埋名窗口中打开代码的url,它就会加载。

    我是不是遗漏了一些特定的标题?
    或者我需要做些不同的事情?

    这是我迄今为止编写的代码:

    import requests
    from lxml import etree
    import mysql.connector
    from mysql.connector import Error
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8,la;q=0.7',
        'Referer': 'https://www.google.com/',
        'sec-ch-ua': '"Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"',
        'sec-ch-ua-mobile': '?0',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'cross-site',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
    }
    
    base_request_url = 'https://www.funda.nl/koop/gemeente-eindhoven/verkocht/200000-350000/sorteer-postcode-af/p'
    request_page_id = 1
    
    request_url = base_request_url + str(request_page_id)
    
    res = requests.get(request_url, headers = headers)
    print(res.text)
    
    3 回复  |  直到 4 年前
        1
  •  0
  •   clankill3r    4 年前

    你能从你以前用过的浏览器中提取标题吗。 下面是一个如何在firefox中获取它的示例。 切换“原始”切换有助于:

    enter image description here

        2
  •  0
  •   alexrogo    4 年前

    也许对于您的案例来说,只需下载页面就足够了,而不是绕过这个问题。然后您可以将html文件指定为(基本\请求\ url)。

    (对不起,我的名声还不够好写评论)

        3
  •  0
  •   Mitchell Olislagers    4 年前

    你可以改变主意 headers

    headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36'}
    

    selenium 在无头模式下。

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    #Set up user agent to avoid bot detection.
    user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'
    #Specify headless mode
    chrome_options.add_argument("--headless")
    #Add user agent
    chrome_options.add_argument(f'user-agent={user_agent}')
    DRIVER_PATH = "path/to/chromedriver" 
    driver = webdriver.Chrome(DRIVER_PATH, options=chrome_options)
    driver.get("https://www.funda.nl/koop/gemeente-eindhoven/verkocht/200000-350000/sorteer-postcode-af/p")
    page_source = driver.page_source
    
    推荐文章