我正在尝试从angellist获取公司列表 https://angel.co/companies
我尝试使用此代码
from bs4 import BeautifulSoup
import urllib2
headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request('https://angel.co/companies', None, headers)
html = urllib2.urlopen(req).read()
soup = BeautifulSoup(html, "html.parser")
p1 = soup.find_all('div' , {"class"," dc59 frw44 _a _jm"})
print p1
但这返回一个空字符串。
我经历过类似的事情问题,有人说更新beautifulsoup,有人说更改解析器。没有什么对我有用。
无法使用 BeautifulSoup 来获取数据的原因是因为 AngelList 网站使用 JavaScript 动态加载内容。 BeautifulSoup 仅解析网页的初始 HTML 源代码,而此源代码中没有要查找的公司列表。
为了从 AngelList 中提取公司数据,需要使用一个能够渲染 JavaScript 并执行网络请求的工具,例如:
1. 使用基于浏览器的库:
- Selenium/Playwright: 这些库允许控制一个真实的浏览器,例如 Chrome 或 Firefox,从而完全加载和呈现 JavaScript 内容。可以模拟用户交互,例如滚动和点击,以加载更多数据。
- Requests-HTML: 这个库建立在 Requests 库之上,并提供了渲染 JavaScript 的功能。
2. 使用 AngelList API:
AngelList 可能提供了一个官方 API,可以使用它来访问公司数据。使用 API 是一种更结构化和可靠的数据提取方法,但需要查阅 AngelList 的文档以了解可用的端点和身份验证要求。
以下是一个使用 Requests-HTML 从 AngelList 获取公司数据的示例:
from requests_html import HTMLSession
session = HTMLSession()
url = 'https://angel.co/companies'
response = session.get(url)
response.html.render(sleep=5) # 等待 JavaScript 渲染完成
companies = response.html.find('div.dc59.frw44._a._jm', containing='company')
for company in companies:
name = company.find('a.startup-link', first=True).text
# ... 提取其他公司信息 ...
print(name)
注意:
-
可能需要安装
requests_html
:pip install requests-html
-
使用
sleep
参数等待页面加载完成,可以根据实际情况调整等待时间。 - 需要根据网站的 HTML 结构修改代码以提取其他公司信息。
建议查看 AngelList 的服务条款,以确保的抓取行为符合其规定。
标签:python,html,web-scraping,beautifulsoup From: 37269187