beautifulSoup soup.select() 为 css 选择器返回空值
beautifulSoup soup.select() returning empty for css selector
我正在尝试解析来自该站点的一些链接
https://news.ycombinator.com/
我想要select一个特定的table
document.querySelector("#hnmain > tbody > tr:nth-child(3) > td > table")
我知道 css select 或 bs4 的限制。但问题是我什至不能 select 像 #hnmain > tbody
和 soup.select('#hnmain > tbody')
一样简单,因为它返回 empty
使用以下代码,我无法解析 tbody,而使用 js 我可以解析(屏幕截图)
from bs4 import BeautifulSoup
import requests
print("-"*100)
print("Hackernews parser")
print("-"*100)
url="https://news.ycombinator.com/"
res=requests.get(url)
html=res.content
soup=BeautifulSoup(html)
table=soup.select('#hnmain > tbody')
print(table)
输出:
soup=BeautifulSoup(html)
[]
为什么不直接进入正文,table为什么不直接进入链接呢?我对此进行了测试,效果很好:
links=soup.select('a',{'class':'storylink'})
如果您想要 table,因为每页只有一个,您也不需要浏览其他元素 - 您可以直接进入它。
table = soup.select('table')
我没有从 beautifulsoup 或 curl 脚本中获取 html 标签 tbody。
意思是
soup.select('tbody')
returns 空列表。这与您获得空列表的相同原因。
要提取您正在寻找的链接,只需执行
soup.select("a.storylink")
它将从站点获取您想要的链接。
数据以 3 行为一组排列,其中第三行是用于间距的空行。循环顶部的行并使用 next_sibling 在每个点获取关联的第二行。 bs4 4.7.1+
from bs4 import BeautifulSoup as bs
import requests
r = requests.get('https://news.ycombinator.com/')
soup = bs(r.content, 'lxml')
top_rows = soup.select('.athing')
for row in top_rows:
title = row.select_one('.storylink')
print(title.text)
print(title['href'])
print('https://news.ycombinator.com/' + row.select_one('.sitebit a')['href'])
next_row = row.next_sibling
print(next_row.select_one('.score').text)
print(next_row.select_one('.hnuser').text)
print(next_row.select_one('.age a').text)
print(next_row.select_one('a:nth-child(6)').text)
print(100*'-')
我正在尝试解析来自该站点的一些链接 https://news.ycombinator.com/
我想要select一个特定的table
document.querySelector("#hnmain > tbody > tr:nth-child(3) > td > table")
我知道 css select 或 bs4 的限制。但问题是我什至不能 select 像 #hnmain > tbody
和 soup.select('#hnmain > tbody')
一样简单,因为它返回 empty
使用以下代码,我无法解析 tbody,而使用 js 我可以解析(屏幕截图)
from bs4 import BeautifulSoup
import requests
print("-"*100)
print("Hackernews parser")
print("-"*100)
url="https://news.ycombinator.com/"
res=requests.get(url)
html=res.content
soup=BeautifulSoup(html)
table=soup.select('#hnmain > tbody')
print(table)
输出:
soup=BeautifulSoup(html)
[]
为什么不直接进入正文,table为什么不直接进入链接呢?我对此进行了测试,效果很好:
links=soup.select('a',{'class':'storylink'})
如果您想要 table,因为每页只有一个,您也不需要浏览其他元素 - 您可以直接进入它。
table = soup.select('table')
我没有从 beautifulsoup 或 curl 脚本中获取 html 标签 tbody。 意思是
soup.select('tbody')
returns 空列表。这与您获得空列表的相同原因。
要提取您正在寻找的链接,只需执行
soup.select("a.storylink")
它将从站点获取您想要的链接。
数据以 3 行为一组排列,其中第三行是用于间距的空行。循环顶部的行并使用 next_sibling 在每个点获取关联的第二行。 bs4 4.7.1+
from bs4 import BeautifulSoup as bs
import requests
r = requests.get('https://news.ycombinator.com/')
soup = bs(r.content, 'lxml')
top_rows = soup.select('.athing')
for row in top_rows:
title = row.select_one('.storylink')
print(title.text)
print(title['href'])
print('https://news.ycombinator.com/' + row.select_one('.sitebit a')['href'])
next_row = row.next_sibling
print(next_row.select_one('.score').text)
print(next_row.select_one('.hnuser').text)
print(next_row.select_one('.age a').text)
print(next_row.select_one('a:nth-child(6)').text)
print(100*'-')