import requests import csv import requests from bs4 import BeautifulSoup r = requests.get('https://pqt.cbp.gov/report/YYZ_1/12-01-2017') soup = BeautifulSoup(r) table = soup.find('table', attrs={ "class" : "table-horizontal-line"}) headers = [header.text for header in table.find_all('th')] rows = [] for row in table.find_all('tr'): rows.append([val.text.encode('utf8') for val in row.find_all('td')]) with open('output_file.csv', 'wb') as f: writer = csv.writer(f) writer.writerow(headers) writer.writerows(row for row in rows if row)
Я пытаюсь проанализировать все данные таблицы на этой конкретной веб-странице: https://pqt.cbp.gov/report/YYZ_1/12-01-2017
Я получаю сообщение об ошибке в строке soup = BeautifulSoup(r).Я получаю ошибку TypeError: object of type 'Response' has no len().Я также не уверен, что моя логика верна.Пожалуйста, помогите мне вставить данные таблицы.
soup = BeautifulSoup(r)
TypeError: object of type 'Response' has no len()
переменная r имеет тип Response, а не str, используйте r.text или r.content, и нет таблицы с классом table-horizontal-line, вы имеете в виду results?
r
Response
str
r.text
r.content
table-horizontal-line
results
soup = BeautifulSoup(r.text) table = soup.find('table', attrs={"class" : "results"})
Я бы сделал это так
import pandas as pd result = pd.read_html("https://pqt.cbp.gov/report/YYZ_1/12-01-2017") df = result[0] # df = df.drop(labels='Unnamed: 8', axis=1) df.to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8',index = False )
попробуй:
r = requests.get('https://pqt.cbp.gov/report/YYZ_1/12-01-2017') soup = BeautifulSoup(r.content)