跨度类的Python 3 BeautifulSoup Strip特定值?

时间:2018-07-01 20:02:02

标签: python html beautifulsoup

我已经测试了一些在这里找到的不同答案,但似乎无法解决我的问题。希望有人能帮忙。

我正在Python 3环境中使用BeautifulSoup 4进行​​抓取。在要抓取的网站上,我试图获取同一span类中文本的特定值。 span类说:

<span class="TeamChip__teamName--1renR">MIL</span> <span class="TeamChip__teamName--1renR">CIN</span>

(我要获取的团队名称)。

当我使用find函数时,它会将两个名称都刮到输出csv中的一个字符串中,但是我想要一个解决方案,它使用某种分隔符将它们分开,或者分成它们的单元格(以任何形式)。现在它以MILCIN的形式出现,我希望它像MIL,CIN。

这是我的Python代码,其中一些我尝试过的解决方案已被注释掉:

from bs4 import BeautifulSoup
import csv

with open('BoxScoreURLS.csv', newline='') as f_urls, open('output.csv', 'w', `newline='') as f_output:`
csv_urls = csv.reader(f_urls)
csv_output = csv.writer(f_output)
csv_output.writerow(['Teams', 'Box Score'])

for line in csv_urls:
    r = requests.get(line[0]).text
    soup = BeautifulSoup(r, 'lxml')
    teams = soup.find("span", {"class":"TeamChip__teamName--1renR"})
    print('Teams :', teams.text)
    #person = {}

    #for span in soup.findAll('span', {'class': '.TeamChip__teamName--1renR'}):
    #   person[span.find('p').attrs['class'][0]] = span.text.strip()

    #print(person)

    print([item.get_text(strip=True) for item in soup.findAll("span.TeamChip__teamName--1renR")])
    #teams = soup.find("div", {"class":"TeamChip__teamName"}).
    #print('Teams :', teams.text)


    csv_output.writerow([teams.text])

输出写到csv很好,但是它将两个值都写在一个字符串(MILCIN)中,但是我希望它是(MIL,CIN),以便我可以更轻松地清理数据。此方法也将应用于得分,因此我不能仅仅接受一个excel公式来拆分数据。

非常感谢!让我知道是否可以回答其他问题。

2 个答案:

答案 0 :(得分:0)

在此示例中,我使用了请求。我已经在这里测试了代码,并且可以正常工作。我没有测试的唯一一件事就是输出到csv文件。因此,如果仍然无法正常工作,我将假定它是其输出方式。

from bs4 import BeautifulSoup
import requests

page = requests.get("http://your-site.com")
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.findAll('span', {'class' :'TeamChip__teamName--1renR'})
for r in range(len(results)):
    csv_output.writerow([results[r].text])

答案 1 :(得分:0)

是的。必须在顶部重新添加导入csv,然后更改page变量,以便它从具有URL列表的csv中获取,但输出有效。它将两个团队名称都放在自己的行中。非常感谢!