网页抓取时如何排除标签
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
我在使用 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