网络抓取时如何排除标签

时间:2019-11-20 23:44:22

标签: python html beautifulsoup screen-scraping

我在使用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')

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

1 个答案:

答案 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