Python 中阻止 GET 请求的解决方法

2024-02-06

我正在尝试使用 requests 和 beautifulsoup 检索和处理网络搜索的结果。

我编写了一些简单的代码来完成这项工作,并且它成功返回(状态 = 200),但请求的内容只是一条错误消息“对于给您带来的不便,我们深表歉意,但该站点当前不可用。” ,并且在过去的几天里一直如此。但是,在 Firefox 中搜索会毫无问题地返回结果。我已经使用英国网站的 URL 运行了代码,并且运行没有问题,所以我想知道美国网站是否设置为阻止抓取网络搜索的尝试。

有没有办法掩盖我试图从 Python 中检索搜索结果的事实(例如,伪装成 Firefox 中的标准搜索)或其他一些解决方法以允许访问搜索结果?

包含代码供参考如下:

import pandas as pd
from requests import get
import bs4 as bs
import re
# works
# baseURL = 'https://www.autotrader.co.uk/car-search?sort=sponsored&radius=1500&postcode=ky119sb&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New&make=TOYOTA&model=VERSO&year-from=1990&year-to=2017&minimum-mileage=0&maximum-mileage=200000&body-type=MPV&fuel-type=Diesel&minimum-badge-engine-size=1.6&maximum-badge-engine-size=4.5&maximum-seats=8'
# doesn't work
baseURL = 'https://www.autotrader.com/cars-for-sale/Certified+Cars/cars+under+50000/Jeep/Grand+Cherokee/Seattle+WA-98101?extColorsSimple=BURGUNDY%2CRED%2CWHITE&maxMileage=45000&makeCodeList=JEEP&listingTypes=CERTIFIED%2CUSED&interiorColorsSimple=BEIGE%2CBROWN%2CBURGUNDY%2CTAN&searchRadius=0&modelCodeList=JEEPGRAND&trimCodeList=JEEPGRAND%7CSRT%2CJEEPGRAND%7CSRT8&zip=98101&maxPrice=50000&startYear=2015&marketExtension=true&sortBy=derivedpriceDESC&numRecords=25&firstRecord=0'
a = get(baseURL)
soup = bs.BeautifulSoup(a.content,'html.parser')

info = soup.find_all('div', class_ = 'information-container')
price = soup.find_all('div', class_ = 'vehicle-price')

d = [] 
for idx, i in enumerate(info):
    ii = i.find_next('ul').find_all('li')

    year_ = ii[0].text
    miles = re.sub("[^0-9\.]", "", ii[2].text)
    engine = ii[3].text
    hp = re.sub("[^\d\.]", "", ii[4].text)
    p = re.sub("[^\d\.]", "", price[idx].text)

    d.append([year_, miles, engine, hp, p])

df = pd.DataFrame(d, columns=['year','miles','engine','hp','price']) 

默认情况下,Requests 在发出请求时会发送唯一的用户代理。

>>> r = requests.get('https://google.com')
>>> r.request.headers
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

您正在使用的网站可能试图通过拒绝用户代理的任何请求来避免抓取工具python-requests.

要解决这个问题,您可以更改您的用户代理 https://stackoverflow.com/questions/10606133/sending-user-agent-using-requests-library-in-python发送请求时。由于它可以在您的浏览器上运行,因此只需复制您的浏览器用户代理(您可以通过 Google 搜索,或记录对网页的请求并复制您的用户代理)。对我来说,它是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36(真是拗口),所以我像这样设置我的用户代理:

>>> headers = {
...     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
... }

然后发送带有新标头的请求(新标头将添加到默认标头中,除非它们具有相同的名称,否则它们不会替换它们):

>>> r = requests.get('https://google.com', headers=headers)  # Using the custom headers we defined above
>>> r.request.headers
{'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

现在我们可以看到请求是使用我们首选的标头发送的,希望网站无法区分请求和浏览器之间的区别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中阻止 GET 请求的解决方法 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • neo4j - python 驱动程序,服务不可用

    我对 neo4j 非常陌生 我正在尝试建立从 python3 6 到 neo4j 的连接 我已经安装了驱动程序 并且刚刚开始执行第一步 导入请求 导入操作系统 导入时间 导入urllib 从 neo4j v1 导入 GraphDatabas
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 在Python中复制基类'__init__'签名的正确方法是什么?

    如果子类没有定义自己的 init 方法时 基类的构造函数 因此其签名 会自动继承 但是应该如何定义子类 init 继承基类签名的方法 自动 例如 class Base def init self arg1 arg2 self arg1 ar
  • 此解析操作已经结束。 Autofac、Automapper 和 IMemberValueResolver

    我对 Autofac 和 Automapper 有疑问 在我的 WebApi 中 我有以下代码来注册我的类 public static void Initialize HttpConfiguration config IContainer
  • 如何将参数传递给sql'in'语句?

    我想创建这个查询 select from products where number in 123 234 456 但我找不到任何使用 Npgsql 和 NpgsqlParameter 实现此目的的示例 我尝试这样 string numbe
  • com.sun.faces.config.ConfigureListener 的配置

    我正在审查当前的 JSF 项目 其中web xml配置包含 FacesServlet 配置在 xhtml the com sun faces config ConfigureListener 我正在使用 JSF 2 2 和 Mojarra
  • 控制器未出现在 swagger-ui.html 中

    我使用 Swagger 2 和非 spring boot 我也可以在 Tomcat 上部署我的应用程序并成功运行它 但控制器并没有出现在swagger ui html 只显示带有绿色招摇标题的空白页面 我在这个问题上花了两天时间 你能给我一
  • 具有子例程和函数的 Fortran OpenMP

    免责声明 我很确定这个问题已经在某个地方得到了回答 但我自己和另一个人一直在努力搜索 但没有结果 我有一个看起来像这样的代码 PROGRAM main omp parallel do omp private somestuff shared
  • 手动身份验证时,使用 sessionRegistry 获取登录用户不起作用

    我使用 spring security3 和 spring mvc3 构建一个Web项目 有一个名为index jsp的页面 上面会显示登录用户名和在线用户数 该屏幕的顶部 有2种方式登录系统 从登录页面 使用 j spring secur
  • 如何在 jQuery Mobile 中动态设置“data-collapsed”和“data-theme”?

    我在运行时动态设置 数据主题 和 数据折叠 时遇到问题 我使用了 selector attr data collapsed false and selector attr data theme b 但它不起作用 如何使用 jQuery 或
  • 如何检查 是否成功

    我正在将主题设置添加到我的 js 应用程序中 该应用程序也应该离线工作 所以我必须检查远程样式文件 例如http ajax googleapis com ajax libs jqueryui 1 11 2 themes jquery jqu
  • perl - 从 xml 文件中删除节点

    我有一个 XML 文件 我想读取它 删除一个节点 保存它 我从终端运行 perl perl script pl XML 示例 文件名 xml
  • 使用 d3.js svg ClipPath 不在 Angular 中进行裁剪

    我正在开发一个与以下示例非常相似的图表 http bl ocks org mbostock 1667367 http bl ocks org mbostock 1667367它使用 ClipPath 来剪切区域 以便区域图不会溢出轴 在 A
  • Ruby 中的 Mysql 适配器 ActiveRecord 抛出:“数据包乱序”

    红宝石版本 1 9 1 MySQL版本 5 0 编写的代码是 require rubygems require active record puts 1 class Source lt ActiveRecord Base puts 2 es
  • 从 JSON 嵌套哈希中提取特定字段

    我正在考虑编写一个 Web 应用程序来抓取 API 并以 JSON 形式返回此信息 但是 我只关注一个数字 然后是当前价格 在本示例中为 227 我如何在 Ruby 中访问它 我不知道从哪里开始 我从来没有处理过这样的文字 为了讨论的目的
  • 如何将 json 对象转换为警报框中的字符串? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想调试我的响应 json 并将其显
  • 向 Angular 4 中的元素添加类

    我试图使用 Angular 4 创建一个图像库 其背后的逻辑是将级联样式表 CSS 类添加到所选图像 该类将在所选 单击的 图像上显示红色边框 这是图片库的 CSS 样式表 我想在我单击的图像上显示红色选择方块 this is a clas
  • 以编程方式旋转 Google 可视化数据表

    我兴奋地这把小提琴 http jsfiddle net asgallant HkjDe 我尝试参考那个小提琴创建相同的类型 我修改后的样本给出在here http jsfiddle net DUn6B 我正在尝试创建一个视图 如下所示 va
  • Python 中的 Selenium PhantomJS 自定义标头

    我想在 python 中向 Selenium PhantomJS 添加 自定义标头 这些是我想添加的标题 headers Accept Accept Encoding gzip deflate sdch Accept Language en
  • 如何检查 R 中的标量?

    我有兴趣识别数字标量 例如 doub lt 3 14 intg lt 8L 我知道这些被视为长度为一的向量 因此 对于任何 R 对象x is is vector x length x 1检查是否正确的方法x是一个标量 length x 1其
  • 使用 Laravel Envoyer 上传特定供应商文件

    我正在尝试使用 Laravel Forge 仅将特定供应商文件上传到我的服务器 原因是因为我编辑了一些依赖项中的代码 现在发生的情况是我网站的某些功能正在破坏 因为当我从 Envoyer 推送到我的服务器时 Envoyer 正在从我的 Gi
  • Python 中阻止 GET 请求的解决方法

    我正在尝试使用 requests 和 beautifulsoup 检索和处理网络搜索的结果 我编写了一些简单的代码来完成这项工作 并且它成功返回 状态 200 但请求的内容只是一条错误消息 对于给您带来的不便 我们深表歉意 但该站点当前不可