soup.select()中的CSS选择器返回null

时间:2019-09-28 19:13:53

标签: python web-scraping beautifulsoup

我正在学习网页抓取,并且想要从与我传入soup.select("css locators")的CSS匹配的网页中获取数据。当我检查网页中的CSS定位符时,它会突出显示正确的元素,但是当我在soup.select()方法中使用相同的元素时,它不会返回零或返回0。

  1. 我正在从以下网站检索数据:https://www.prokabaddi.com/teams/bengaluru-bulls-profile-1

  2. Css选择器,用于从上述网站.si-section-header > span.si-title

  3. 中获取数据 当我在浏览器中检查网页时,使用上述CSS的
  4. 可以正常工作,但是当我在soup.select(".si-section-header > span.si-title")方法中使用该网页时,它不返回任何值或为0

# code sample 
import requests 
import bs4 

URL = "https://www.prokabaddi.com/teams/bengaluru-bulls-profile-1"
r = requests.get(URL) 

soup = BeautifulSoup(r.content, 'html.parser') 
a = soup.select('.si-section-header > span.si-title')
Print(a)

我希望输出返回CSS选择器突出显示的值。在这种情况下,CSS会突出显示3个值,因此我希望在执行上述代码时打印出所有3个值。

2 个答案:

答案 0 :(得分:2)

大量内容是动态添加的,不会被您的初始请求所捕获。您正在查看的元素是从另一资源中提取的模板的一部分。刷新页面时,您可以在“网络”标签中找到它。

var firebaseConfig = {
  apiKey: "AIzaSyAPeU7jO2Zz5kdrh-4g4ehfcrL8Aufzubs",
  authDomain: "udemy-modern-javascript-cee40.firebaseapp.com",
  databaseURL: "https://udemy-modern-javascript-cee40.firebaseio.com",
  projectId: "udemy-modern-javascript-cee40",
  storageBucket: "udemy-modern-javascript-cee40.appspot.com",
  messagingSenderId: "941299603483",
  appId: "1:941299603483:web:afcd4f1da6878b51ef80be",
  measurementId: "G-BRYW3TQNLL"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const db = firebase.analytics();

db.collection('recipes').get().then((snapshot)=>{
  console.log(snapshot);
}).catch(err =>{
  console.log(err)
});

const db = firebase.analytics();

答案 1 :(得分:0)

根据所需的数据,很多数据将以JSON返回。

import requests

j = requests.get("https://www.prokabaddi.com/sifeeds/kabaddi/live/json/multisport_cache_25_3_pkl_0530_en_team_1.json").json()

for match in j['matches']:
    print(match)

可能包含所需数据的其他URL包括:

https://www.prokabaddi.com/sifeeds/kabaddi/static/json/1_team.json

https://www.prokabaddi.com/sifeeds/kabaddi/live/json/multisport_cache_25_3_0_0530_en_4.json

打开开发人员工具,依次选择“网络”标签,XHR和刷新页面,即可查看所有内容