Вы анализируете html
, но вы использовали парсер xml
.
Вы должны использовать soup=BeautifulSoup(data,"html.parser")
Ваши данные указаны в поле script
, на самом деле нет table
. Итак, вам нужно найти тексты внутри script
.
N.B: Если вы используете Python 2.x, используйте «HTMLParser» вместо «html.parser».
Вот код.
import csv
import requests
from bs4 import BeautifulSoup
url = "http://www.payscale.com/college-salary-report/bachelors?page=65"
r=requests.get(url)
data=r.text
soup=BeautifulSoup(data,"html.parser")
scripts = soup.find_all("script")
file_name = open("table.csv","w",newline="")
writer = csv.writer(file_name)
list_to_write = []
list_to_write.append(["Rank","School Name","School Type","Early Career Median Pay","Mid-Career Median Pay","% High Job Meaning","% STEM"])
for script in scripts:
text = script.text
start = 0
end = 0
if(len(text) > 10000):
while(start > -1):
start = text.find('"School Name":"',start)
if(start == -1):
break
start += len('"School Name":"')
end = text.find('"',start)
school_name = text[start:end]
start = text.find('"Early Career Median Pay":"',start)
start += len('"Early Career Median Pay":"')
end = text.find('"',start)
early_pay = text[start:end]
start = text.find('"Mid-Career Median Pay":"',start)
start += len('"Mid-Career Median Pay":"')
end = text.find('"',start)
mid_pay = text[start:end]
start = text.find('"Rank":"',start)
start += len('"Rank":"')
end = text.find('"',start)
rank = text[start:end]
start = text.find('"% High Job Meaning":"',start)
start += len('"% High Job Meaning":"')
end = text.find('"',start)
high_job = text[start:end]
start = text.find('"School Type":"',start)
start += len('"School Type":"')
end = text.find('"',start)
school_type = text[start:end]
start = text.find('"% STEM":"',start)
start += len('"% STEM":"')
end = text.find('"',start)
stem = text[start:end]
list_to_write.append([rank,school_name,school_type,early_pay,mid_pay,high_job,stem])
writer.writerows(list_to_write)
file_name.close()
Это создаст необходимую таблицу в csv. Не забудьте закрыть файл, когда закончите.
Я бы напечатать 'data' и посмотреть, если вы найдете таблицу в пределах этой страницы. – metame
Спасибо @metama. Я сделал это - единственное: и bsoup не нашли бы его. Также - если поиск в этом случае не так, то как бы вы шли Это? благодаря! – oba2311
на странице нет тега таблицы. Вся информация таблицы содержится в теге скрипта. –