BeautifulSoup со столом - PullRequest
       4

BeautifulSoup со столом

0 голосов
/ 26 ноября 2018

Я работаю в Web Scraping на Beautiful Soup и получаю сообщение об ошибке в строке 13: для строки в table.findAll ('tr').Это происходит ошибка на cmd.Надеюсь, кто-нибудь может помочь.

import csv
import requests
from bs4 import BeautifulSoup 

url='http://www.dublincity.ie/dublintraffic/carparks.htm'
response = requests.get(url)
html= response.content

soup=BeautifulSoup(html)
table=soup.find('tbody', attrs={'id' :'itemsBody'})

list_of_rows=[]
for row in table.findAll('tr'):
    list_of_cells=[]
    for cell in row.findAll('td'):
        text = cell.text.replace(' ','')
        list_of_cells.append(text)
    list_of_cells.append(list_of_cells)

outfile= open("./carpark.csv", "wb")
writer=csv.writer(outfile)
writer.writerows(["location","spaces"])
writer.writerows(list_of_rows)

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Если вы хотите придерживаться BeautifulSoup, вы можете извлечь и записать содержимое, используя его анализатор xml и csv.DictWriter().Проверьте реализацию:

import csv
import requests
from bs4 import BeautifulSoup

url = 'http://www.dublincity.ie/dublintraffic/cpdata.xml?1543254514266'

res = requests.get(url)
soup = BeautifulSoup(res.content,"xml")
data = []
for item in soup.select("carpark"):
    ditem = {}
    ditem['Name'] = item.get("name")
    ditem['Spaces'] = item.get("spaces")
    data.append(ditem)

with open("xmldocs.csv","w",newline="") as f:
    writer = csv.DictWriter(f,["Name","Spaces"])
    writer.writeheader()
    for info in data:
        writer.writerow(info)
0 голосов
/ 26 ноября 2018

Вы можете получить данные в виде XML-документа, а затем проанализировать.Это всего лишь пример части процесса, которую вы можете адаптировать.

import requests
from xml.etree import ElementTree
import pandas as pd
url = 'http://www.dublincity.ie/dublintraffic/cpdata.xml?1543254514266'
xml_data = requests.get(url).content
tree = ElementTree.fromstring(xml_data)
parking = []
for child in tree:
    for nextChild in child:
        parking.append([child.tag ,nextChild.attrib['name'],nextChild.attrib['spaces']])
df = pd.DataFrame(parking)
print(df)
df.to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8',index = False )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...