beautifulSoup soup.select()对于CSS选择器返回空

时间:2019-10-20 04:31:18

标签: python web-scraping beautifulsoup python-3.7

我正在尝试解析该网站的一些链接 https://news.ycombinator.com/

我要选择一个特定的表

document.querySelector("#hnmain > tbody > tr:nth-child(3) > td > table")

我知道bs4有css选择器限制。但是问题是,我什至无法选择像#hnmain > tbody那样简单的soup.select('#hnmain > tbody'),因为它返回了

使用下面的代码,我无法解析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)
[]

screenshot

3 个答案:

答案 0 :(得分:2)

为什么不直接浏览正文和表格,而不直接浏览链接?我对此进行了测试,效果很好:

links=soup.select('a',{'class':'storylink'})

如果要使用该表,由于每页只有一个,因此您也不需要遍历其他元素-您可以直接访问它。

table = soup.select('table')

答案 1 :(得分:1)

我没有从beautifulsoup或curl脚本获得html标签 tbody 。 表示

soup.select('tbody')

返回空列表。这是相同原因让您获得空白列表的原因。

要仅提取您正在寻找的链接

soup.select("a.storylink")

它将从站点获取您想要的链接。

答案 2 :(得分:1)

数据以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*'-')