如何使用 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 标签?