网页抓取时如何排除标签

How to exclude a tag when web scraping

我在使用 Python 3.8 和 BeautifulSoup 抓取网页时遇到了问题,我遇到了一个我无法解决的问题。我正在抓取的页面有两个相似的 div 标签,它们都包含一个 id 值,但是其中一个还包含一个额外的 class 容器:

例如第一个标签returns:;和第二个标签 returns .

我可以使用 "page = soup.find_all('div', { "id" : "race-1"})" 找到标签,但这 returns 都是 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')

无论如何我都不是开发人员,所以非常感谢您的帮助。

您可以修改 find_all 调用以按 css class 以及标记 ID

进行过滤
    raceid = "race-1"
    page = soup.find_all('div', id=raceid, class_='')

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class