无法从漂亮的汤中读取HTML页面

时间:2018-12-14 15:28:19

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

以下代码在输出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)

2 个答案:

答案 0 :(得分:2)

  

无法阅读漂亮汤中的html页面

为什么会出现此问题,是因为网站认为您是机器人,他们不会向您发送任何信息。而且他们甚至挂断了连接,让您永远等待。

  

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

添加标题是解决此问题的最简单方法。但是,您不应该仅通过User-Agent(例如这次)。切记复制浏览器的请求并通过测试删除无用的元素。如果您很懒惰,请直接使用浏览器的标题,但是在上传文件时,请勿复制所有标题

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")

答案 1 :(得分:1)

与您有相同的问题。只是坐在那里。 我尝试添加用户代理,然后迅速地将其撤消。不知道为什么会这样。

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)

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

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()