如何使用 Beautifulsoup 解析网站

Posted

技术标签:

【中文标题】如何使用 Beautifulsoup 解析网站【英文标题】:How to parse the website using Beautifulsoup 【发布时间】:2017-03-08 09:32:41 【问题描述】:

我是网络抓取的新手,我想获取页面的 html。但是当我运行程序时,我的 html 为空,控制台显示 javascript

from bs4 import BeautifulSoup
import requests
import urllib

url = "https://linkedin.com/company/1005"

r = requests.get(url)
html_content = r.text
soup = BeautifulSoup(html_content,'html.parser')
print (soup.prettify())

【问题讨论】:

许多页面使用Javascript从服务器读取数据并向页面添加元素。 BS 不运行 JavaScript。在浏览器运行 JavaScript 之前,您会获得与浏览器相同的 HTML。你可以使用 Selenium 来控制浏览器和运行 JS。或者您可以(手动)分析页面并找到使用JS获取数据的url,然后您可以使用请求来获取这些数据。 所以我首先运行 selenium,然后使用 beautifulsoup 解析数据? 是的,运行 selenium,它使用浏览器 Chrome/Firefox(或 PhantomJS 之类的无头浏览器)来呈现页面,然后您可以获得所有 HTML。顺便说一句:您甚至可以单击按钮,在此浏览中填写表格。 或分析浏览器和服务器之间的通信(使用 Chrome/Firefox 中的 DevTools)以找到浏览器用来读取更多数据的 url,然后您可以将此 url 用于请求。有时您可以获取 JSON 格式的数据,您可以轻松地将其转换为 Python 字典。 我已经使用 lxml 编写了代码并将其转换为 json 形式,但现在我想改变我的方法并使用漂亮的汤和他们疯了,因为我得到的只是是javascript 【参考方案1】:

问题不是BeautifulSoup,而是服务器需要更多请求信息才能让您访问此页面。现在它会发送 JavaScript 代码,将您重定向到登录页面。

您需要User-Agent 标头才能获取此页面。

您可以使用http://httpbin.org/get 在浏览器中查看User-Agent

import requests
from bs4 import BeautifulSoup

headers = 'User-Agent': 'Mozilla/5.0'

url = "https://linkedin.com/company/1005"

r = requests.get(url, headers=headers)
print(r.text)

soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify())

【讨论】:

小修正:import requests 而不是import request

以上是关于如何使用 Beautifulsoup 解析网站的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中使用 Selenium 和 Beautifulsoup 解析网站? [关闭]

网页内容爬取:如何提取正文内容 BEAUTIFULSOUP的输出

Python - BeautifulSoup - 如何进行在线数据解析

如何使用 BeautifulSoup 解析特定的 HTML 标签?

使用 Selenium 和 Beautifulsoup 解析 Airdna 地图悬停在文本上

Mooc爬虫03-BeautifulSoup