【问题标题】:Unable to read html page from beautiful soup无法从美丽的汤中读取 html 页面
【发布时间】:2019-05-15 21:28:24
【问题描述】:

下面的代码在输出中打印 hi 后卡住了。你能检查一下这有什么问题吗?如果网站是安全的并且我需要一些特殊的身份验证?

from bs4 import BeautifulSoup
import requests

print('hi')
rooturl='http://www.hoovers.com/company-information/company-search.html'
r=requests.get(rooturl);
print('hi1')
soup=BeautifulSoup(r.content,"html.parser");
print('hi2')
print(soup)

【问题讨论】:

  • 当您说“代码卡住”时,您是什么意思?有错误吗?它只是什么都不做吗?
  • 我不是在问后台发生了什么,我是在问你看到的行为。好的mcve 的一部分是准确描述您正在经历的事情以及与您预期的不同之处。

标签: python python-3.x beautifulsoup python-requests python-beautifultable


【解决方案1】:

无法从美汤中读取 html 页面

您遇到此问题的原因是网站认为您是机器人,他们不会向您发送任何内容。他们甚至挂断了连接让你永远等待。

你只是模仿浏览器的请求,服务器会认为你不是机器人。

添加标题是处理此问题的最简单方法。但是你不应该只通过User-Agent(比如这次)。请记住复制浏览器的请求并通过测试删除无用的元素。如果你比较懒,直接使用浏览器的headers,但是上传文件的时候千万不要全部复制

from bs4 import BeautifulSoup
import requests

rooturl='http://www.hoovers.com/company-information/company-search.html'
with requests.Session() as se:
    se.headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "Accept-Encoding": "gzip, deflate",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Language": "en"
    }
    resp = se.get(rooturl)
print(resp.content)
soup = BeautifulSoup(resp.content,"html.parser")

【讨论】:

  • 它有效,但请您详细说明一下。因为当@chitown88 在标题中使用 user_agent() 时,我尝试了同样的事情。
  • 与普通的不同,我曾经添加整个浏览器的请求,然后继续删除,除非通过测试。但是为什么我认为这个问题可能与标题有关,因为当我禁用 JavaScript 并重新加载页面时,它什么都没有改变。总而言之,如果不能正确响应,你应该知道三个原因 1. JavaScript 2. 请求内容 3. 某些服务(如 cloudflare)
  • 并且通过请求内容并且它不使用https,我认为原因不会是情况3。所以我需要尝试模仿请求内容。
【解决方案2】:

遇到了和你一样的问题。只是坐在那里。 我尝试通过添加用户代理,它很快就拉了它。不知道为什么会这样。

from bs4 import BeautifulSoup
import requests


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'}

print('hi')
rooturl='http://www.hoovers.com/company-information/company-search.html'
r=requests.get(rooturl, headers=headers)
print('hi1')
soup=BeautifulSoup(r.content,"html.parser");
print('hi2')
print(soup)

编辑:太奇怪了。现在它不再适合我了。它首先没有工作。然后它做到了。现在没有了。但是使用 Selenium 还有另一个潜在的选择。

from bs4 import BeautifulSoup
import requests
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.hoovers.com/company-information/company-search.html')

r = browser.page_source
print('hi1')
soup=BeautifulSoup(r,"html.parser")
print('hi2')
print(soup)

browser.close() 

【讨论】:

  • 有趣,尝试做同样的事情,但它仍在等待。也许是因为我第一次尝试不使用它来重现问题。
  • 他们可能正在检测爬虫并阻止它们
  • 我已经使用 user_agent from user_agent import generate_user_agent headers = {'User-Agent': generate_user_agent()} 还是没有运气
  • 对不起。那我真的不知道是什么问题。为我工作。希望有人有进一步的见解?不过我会继续寻找
  • 你几乎是对的,如果这不是动态页面,你不需要 selenium。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
相关资源
最近更新 更多