【问题标题】:Can't parse phone numbers from a webpage using requests module无法使用请求模块解析网页中的电话号码
【发布时间】:2021-06-16 13:17:15
【问题描述】:

我正在尝试使用 requests 模块从 webpage 中获取电话号码。我使用 selenium 取得了成功,但我希望使用 requests 模块实现相同的目标。我尝试了很多使用 chrome 开发工具观察网络活动来寻找任何线索,但我失败了。如果您想知道我是如何使用 selenium 做到的,我想粘贴 selenium 脚本。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.numberbarn.com/search?state=New%20Jersey'

with webdriver.Chrome() as driver:
    driver.get(url)
    for item in WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".results-list .container"))):
        phone = WebDriverWait(item,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".telephone-number"))).text
        print(phone)

如何使用请求模块从上述网页解析电话号码?

【问题讨论】:

  • 我回答了你的问题,但只是想发表评论;我还有一只波士顿梗犬(你的标志图片),住在新泽西,小世界!

标签: python python-3.x web-scraping python-requests


【解决方案1】:

Requests 是一个对 URI 进行原始 GET 的模块;在这种情况下,它将获取该网页的 HTML。

如果您在浏览器中打开该网页并使用开发人员工具查看它,您将看到这些电话号码实际上都不是在 HTML 中,因此请求(获取)+ XPATH(解析)或像 Scrapy 之类的工具可能会不帮你。它基本上只是一个 Javascript blob:

  <meta name="twitter:domain" content="numberbarn.com">
  <base href="/">
  <link id="favicon" rel="icon" type="image/x-icon">
  <script async src="//www.googletagmanager.com/gtag/js"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
  </script>
<link rel="stylesheet" href="/angular/styles.d7cd4c8476c1236343ec.css"></head>
<body>
<app-root></app-root>
<link id="brand-stylesheet" rel="stylesheet"/>
<script src="//browser.sentry-cdn.com/5.17.0/bundle.min.js" integrity="sha384-lowBFC6YTkvMIWPORr7+TERnCkZdo5ab00oH5NkFLeQUAmBTLGwJpFjF6djuxJ/5" crossorigin="anonymous"></script>
<script src="/angular/runtime-es2015.cd8b7003cdbc6c84c9fd.js" type="module"></script><script src="/angular/runtime-es5.cd8b7003cdbc6c84c9fd.js" nomodule defer></script><script src="/angular/polyfills-es5.3c509d0a8908a60997e3.js" nomodule defer></script><script src="/angular/polyfills-es2015.ce03948e69242dd06dc0.js" type="module"></script><script src="/angular/vendor-es2015.a7e86119a8ea99d5add3.js" type="module"></script><script src="/angular/vendor-es5.a7e86119a8ea99d5add3.js" nomodule defer></script><script src="/angular/main-es2015.e16ee0657047312eb515.js" type="module"></script><script src="/angular/main-es5.e16ee0657047312eb515.js" nomodule defer></script></body>
</html>

您也可以通过以下方式查看:

curl "https://www.numberbarn.com/search?state=New%20Jersey" > blob.html

并在文本编辑器中打开blob.html

你确实需要像 Selenium 这样的东西,它可以驱动网页,并且能够解析它“发布”javascript 渲染。

TLDR Requests + XPATH 只能在您尝试解析的页面包含您想要的 HTML 数据时使用。

【讨论】:

  • 感谢您的回答@Tommy。问题是很多网站在他们的 html 中不包含所需的内容,但我们仍然可以使用任何 ajax 调用/外部请求或类似的东西来访问他们的内容,这就是我想要找出的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2014-10-03
相关资源
最近更新 更多