我正在尝试通过抓取网站来提取邮政编码和悉尼郊区作为数据框
我已经在beautifulsup中找到了相应的标签,但无法完成该过程
import requests
from bs4 import BeautifulSoup
url = 'https://data.mongabay.com/igapo/australia/postcodes/sydney-numeric.html'
res = requests.get(url)
soup = BeautifulSoup(res.text,'html5lib')
table = soup.find_all('table')[10]
rows = table.find_all('td')[2]
for br in rows.find_all("br"):
br.replace_with("\n")
parsedText = rows.get_text()
我期望一个数据帧,例如:
postcode suburbs
2000 Australia Square Post Office
2000 Circular Quay
2000 Clarence Street Post Office
...
感谢您的帮助
答案 0 :(得分:0)
一种较为冗长的方法。 bs4 4.7.1
import requests
import pandas as pd
url = 'https://data.mongabay.com/igapo/australia/postcodes/sydney-numeric.html'
r = requests.get(url, headers = {'User-Agent' : 'Mozilla/5.0'})
soup = bs(r.content, 'lxml')
codes = []
names = []
for line in soup.select_one('h1:contains("Postal codes") ~ font [size="2"]').text.split('\n'):
if line[:4]:
codes.append(line[:4]), names.append(line[5:])
df = pd.DataFrame(list(zip(codes, names)), columns = ['code', 'name'])
答案 1 :(得分:0)
您几乎完成了所有工作!您只需要正确阅读它即可。
from io import StringIO
import re
pd.read_csv(StringIO(parsedText), sep= r'(?<=\d) ', header = None, engine = 'python')
因此,我们需要使用StringIO使pd.read_csv
可以读取您的文本,然后我们可以执行一些正则表达式来定义分隔符。
r'(?<=\d) '
查找空格(注意')'后面的空格)。