为什么在使用请求时 <ul> 为空,而在浏览器中却没有?
Why is <ul> empty when using requests but not in browser?
我正在尝试使用 beautifulsoup 和请求从 https://www.webwire.com/IndustryList.asp
中抓取一份贸易出版物列表。当我用浏览器检查页面内容时,我看到一个列表:
<ul id="syndication-list">
<li>15 Minutes More Productions</li>
<li>AAA Go Magazine</li>
<li>AAA Going Places</li>
<li>AAA Motorist</li>
</ul>
但是当我使用requests
时,列表是空的,我只看到:
</ul></div>
如何抓取列表中的项目?
import requests
page = requests.get('https://www.webwire.com/TradePublications.asp?ind=LEI')
print(page.text)
您提到的页面使用客户端呈现来创建您要抓取的列表。如果您向页面发送一个简单的 http 请求,它只响应 JavaScript 代码(或 link ),渲染这些元素并且浏览器负责渲染它。
主要有两个选项,如果你想得到这个内容:
运行 无头浏览器中的页面
您可以 运行 无头浏览器中的页面,它将呈现数据,在呈现数据后,您可以抓取它们。有几个选项,但对于 python 最常见的是硒。
跟踪请求
您还可以查看网站源代码(或使用 devtools 中的网络选项卡)并确定它如何填充您要查找的元素(通常使用某种 API)。然后您可以重现网站所做的请求并直接访问信息。
无头浏览器选项设置起来更容易、更快捷,但速度较慢且占用更多资源。您需要评估哪种方法更适合您的用例。
有效
import requests
from bs4 import BeautifulSoup
url = "https://www.webwire.com/TradePublications.asp?ind=LEI"
page = requests.get(url)
#print(url)
soup = BeautifulSoup(page.content, 'html.parser')
for e in soup.select('#syndication-list li'):
print(e.get_text())
输出:
101 North Magazine (Gannett Pacific Publications)
15 Minutes More Productions
AAA Go Magazine
AAA Going Places
AAA Motorist
AAA World
AAHOA Lodging Business Magazine
Adfax
Admark Marketing Report
Adweek
African Americans on Wheels magzine
Agent@Home magazine
Air Transport World Magazine
Airguide Magazine & AirguideOnline.com
AIRS
Alaska Airlines Magazine
America West Magazine
American Executive magazine
American Express Publishing
American Fitness
American Media
American Profile
AMERICAN ROAD MAGAZINE
American Salon Magazine
American Saver Magzine
我正在尝试使用 beautifulsoup 和请求从 https://www.webwire.com/IndustryList.asp
中抓取一份贸易出版物列表。当我用浏览器检查页面内容时,我看到一个列表:
<ul id="syndication-list">
<li>15 Minutes More Productions</li>
<li>AAA Go Magazine</li>
<li>AAA Going Places</li>
<li>AAA Motorist</li>
</ul>
但是当我使用requests
时,列表是空的,我只看到:
</ul></div>
如何抓取列表中的项目?
import requests
page = requests.get('https://www.webwire.com/TradePublications.asp?ind=LEI')
print(page.text)
您提到的页面使用客户端呈现来创建您要抓取的列表。如果您向页面发送一个简单的 http 请求,它只响应 JavaScript 代码(或 link ),渲染这些元素并且浏览器负责渲染它。 主要有两个选项,如果你想得到这个内容:
运行 无头浏览器中的页面
您可以 运行 无头浏览器中的页面,它将呈现数据,在呈现数据后,您可以抓取它们。有几个选项,但对于 python 最常见的是硒。
跟踪请求
您还可以查看网站源代码(或使用 devtools 中的网络选项卡)并确定它如何填充您要查找的元素(通常使用某种 API)。然后您可以重现网站所做的请求并直接访问信息。
无头浏览器选项设置起来更容易、更快捷,但速度较慢且占用更多资源。您需要评估哪种方法更适合您的用例。
有效
import requests
from bs4 import BeautifulSoup
url = "https://www.webwire.com/TradePublications.asp?ind=LEI"
page = requests.get(url)
#print(url)
soup = BeautifulSoup(page.content, 'html.parser')
for e in soup.select('#syndication-list li'):
print(e.get_text())
输出:
101 North Magazine (Gannett Pacific Publications)
15 Minutes More Productions
AAA Go Magazine
AAA Going Places
AAA Motorist
AAA World
AAHOA Lodging Business Magazine
Adfax
Admark Marketing Report
Adweek
African Americans on Wheels magzine
Agent@Home magazine
Air Transport World Magazine
Airguide Magazine & AirguideOnline.com
AIRS
Alaska Airlines Magazine
America West Magazine
American Executive magazine
American Express Publishing
American Fitness
American Media
American Profile
AMERICAN ROAD MAGAZINE
American Salon Magazine
American Saver Magzine