我正在尝试使用beautifulsoup刮擦两张桌子,然后撞到砖墙上。网站:https://bgp.he.net/country/US我正试图从表中获取标题行,但由于某种原因无法将其解析为列表,因此我可以对其进行操作。然后,我想从每一列中获取数据并将其全部输出到JSON文件。
示例:
for row in soup.find_all("tr"):
#Append to list(?)
要删除不需要的条目吗?
我希望能够将其输出到JSON文件并像这样显示它。
ASN#:国家/地区:“美国”,“名称”:XXX,“ Routes V4”,“ XXXX”,“ Routes V6”,“ XXX”
答案 0 :(得分:1)
如果您获得的响应代码不是标头中设置了200
的User-Agent,则获取403 Forbidden
。
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0'}
html = requests.get('https://bgp.........', headers=headers)
soup = BeautifulSoup(html.text, 'html.parser')
#print(soup)
data = []
for row in soup.find_all("tr")[1:]: # start from second row
cells = row.find_all('td')
data.append({
'ASN': cells[0].text,
'Country': 'US',
"Name": cells[1].text,
"Routes V4": cells[3].text,
"Routes V6": cells[5].text
})
print(data)
结果:
[
{'ASN': 'AS6939', 'Country': 'US', 'Name': 'Hurricane Electric LLC', 'Routes V4': '127,337', 'Routes V6': '28,227'},
{'ASN': 'AS174', 'Country': 'US', 'Name': 'Cogent Communications', 'Routes V4': '118,159', 'Routes V6': '8,814'}
]
获取国家和地区代码
country = soup.select_one('h2 img').get('title')
# United State
country_code = 'https://bgp.he.net/country/US'.split('/')[-1]
# US
答案 1 :(得分:1)
与下面的BeautifulSoup版本略有不同的方法,为您提供选择。
我喜欢BeautifulSoup进行解析,直到看到<table>
标签。然后我通常只去Pandas来获取表,因为它可以在1行中完成,然后可以根据需要操纵数据框。
然后可以将数据帧转换为json(实际上是几周前从ewwink解决方案中学到的:-))
import pandas as pd
import requests
import json
url = 'https://bgp.he.net/country/US'
session = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
"Accept-Encoding": "gzip, deflate",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "en"}
response = session.get(url, headers=headers)
tables = pd.read_html(response.text)
table = tables[0]
table['Country'] = url.split('/')[-1]
jsonObject = table.to_dict(orient='records')
# if you need as string to write to json file
jsonObject_string = json.dumps(jsonObject)
输出:
[{'ASN': 'AS6939', 'Name': 'Hurricane Electric LLC', 'Adjacencies v4': 7216, 'Routes v4': 127337, 'Adjacencies v6': 4460, 'Routes v6': 28227, 'Country': 'US'}, {'ASN': 'AS174', 'Name': 'Cogent Communications', 'Adjacencies v4': 5692, 'Routes v4': 118159, 'Adjacencies v6': 1914, 'Routes v6': 8814, 'Country': 'US'}...