我在使用Python 3.8和BeautifulSoup抓取网页方面遇到了麻烦,遇到了一个我无法解决的问题。我正在抓取的页面上有两个类似的div标签,它们都包含一个id值,但是其中一个还包含一个附加的类容器:
例如,第一个标签返回:然后第二个标记返回。
我可以使用“ page = soup.find_all('div',{“ id”:“ race-1”}))“查找标签,但这将返回两个div。有没有办法我只能找到包含“”的div?我只想要这个,因为这个div标签中的数据格式对我来说要容易得多。
我已经提取了我正在使用的代码的以下相关部分:
from bs4 import BeautifulSoup
import csv
import bleach
import os.path
from os import path
def scrape(racedate, location, races, pageurl):
if path.exists("ResultsData.csv"):
f = csv.writer(open('ResultsData.csv', 'a', newline='')) #Use
else:
f = csv.writer(open('ResultsData.csv', 'a', newline='')) #Use
f.writerow(['RaceDate', 'RaceLocation', 'RaceNumber', 'RaceName', 'Distance', 'RaceClass', 'PrizeMoney', 'RaceSplits', 'Place', 'BoxNo', 'DogName', 'Trainer', 'Time', 'Margin', 'Split', 'InRun', 'Weight', 'Sire', 'Dam', 'SPrice'])
page = requests.get(pageurl)
# Create a BeautifulSoup object
soup = BeautifulSoup(page.text, 'lxml')
file1 = open("MyFile.txt","a")
raceid = "race-1"
page = soup.find_all('div', { "id" : raceid})
file1.write(str(page))
scrape('2019/11/16', 'ipswich', '10', 'https://www.thegreyhoundrecorder.com.au/results/ipswich/68024')
无论如何我都不是开发人员,因此非常感谢您的帮助。
答案 0 :(得分:0)
您可以修改find_all
调用以按CSS类和标记ID进行过滤
raceid = "race-1"
page = soup.find_all('div', id=raceid, class_='')
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class