【问题标题】:How to exclude a tag when web scraping网页抓取时如何排除标签
【发布时间】:2019-11-20 23:44:22
【问题描述】:

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

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

【问题讨论】:

  • 你能分享两个div的例子吗?

标签: python html beautifulsoup screen-scraping


【解决方案1】:

您可以修改您的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

【讨论】:

  • 非常感谢您的回答,效果很好!
  • 出于好奇,如果我想选择所有 id-raceid 和 class="除 xyz" 之外的所有 div,可以这样做吗?例如,我想选择所有类等于蓝色或红色或黄色但不是紫色的 div。
  • 是的,您可以为过滤设置更复杂的条件,查看此处的文档页面crummy.com/software/BeautifulSoup/bs4/doc/… 并查看has_six_characters 示例,您可以使用任何您想要返回基于布尔值的函数给定的类。如有疑问,请阅读文档
猜你喜欢
  • 2020-02-25
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2022-07-01
  • 2015-01-22
  • 2020-10-19
  • 2021-07-06
  • 2014-05-11
相关资源
最近更新 更多