如何仅抓取全部属于同一类的某些标签?

时间:2019-05-22 23:38:09

标签: python html web-scraping beautifulsoup

我正在创建此程序,该程序使我可以从该网站上抓取角色的所有名称和能力。包含我需要的信息的标签(li)与其他不需要的li标签混合在一起。

我尝试选择不同的类别,但是那行不通。

这是我的代码:

import bs4, requests, lxml, re, time, os
from bs4 import BeautifulSoup as soup

def webscrape():
    res = requests.get('https://www.usgamer.net/articles/15-11-2017-skyrim-guide-for-xbox-one-and-ps4-which-races-and-character-builds-are-the-best')
    soup = bs4.BeautifulSoup(res.text, 'lxml')
    races_list = soup.find_all("li < strong")
    races_list_text = [f.text.strip() for f in races_list]
    print(races_list_text)
    time.sleep(1)
webscrape()

预计将打印出所有比赛及其相应的信息。

1 个答案:

答案 0 :(得分:0)

您可以使用以下

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.usgamer.net/articles/15-11-2017-skyrim-guide-for-xbox-one-and-ps4-which-races-and-character-builds-are-the-best')
soup = bs(r.content, 'lxml')

#one  list of tuples
race_info = [ (item.text, item.next_sibling) for item in soup.select('h2 ~ ul strong')]
# separate lists
races, abilities = zip(*[ (item.text, item.next_sibling) for item in soup.select('h2 ~ ul strong')])

在这种情况下,字典可能会更好

race_info = [ (item.text, item.next_sibling) for item in soup.select('h2 ~ ul strong')]
race_info = dict(race_info)

~general sibling combinator

  

〜组合器选择同级。这意味着第二个要素   跟随第一个(尽管不一定立即),并且两个都共享   同一个父母。