用 BeautifulSoup 抓取后提取单词

Posted

技术标签:

【中文标题】用 BeautifulSoup 抓取后提取单词【英文标题】:extract word from after scraping with BeautifulSoup 【发布时间】:2021-11-20 11:20:42 【问题描述】:

我在网页中使用 BeautifulSoup4 收集了一些信息:https://www.peakbagger.com/list.aspx?lid=5651

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.peakbagger.com/list.aspx?lid=5651'
html = urlopen(url)
soup = BeautifulSoup(html, 'html.parser')

row = soup.find('tr') 
row

rows = soup.find_all('tr')
for row in rows:          
    print(row.get_text())

我想打印单词,以便每个单词都可以显示在每个不同的部分中,例如

之前:

1.富士山关东3776山梨县/静冈县本州3776318

2.北岳中部3192山梨县本州223731

之后:

(a= )

富士山

北岳

...

(b=)

关东

中部

...

(c=)

3776

3192

...

对于从 1. 到 100 的每一行。

我应该使用 for 循环还是拆分来打断每个单词?

谢谢。

【问题讨论】:

我相信这就是你想要的***.com/questions/23377533/… 嗨,我试过了,但我认为它给了我一个错误,'str' object has no attribute 'append' 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

试试这些:

import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.3"

r = requests.get("https://www.peakbagger.com/list.aspx?lid=5651")
soup = BeautifulSoup(r.content, "lxml")
table = soup.find("table", class_="gray")
header = [th.get_text(strip=True) for th in table.tr.select("th")][1:]
header.insert(0, 'S.No')

all_data = []
for row in table.select("tr:has(td)"):
    tds = [td.get_text(strip=True) for td in row.select("td")]
    all_data.append(tds)

df = pd.DataFrame(all_data, columns=header)
print(df)
df.to_csv("data.csv", index=False)

输出:

 S.No         Peak        Section  ... Range (Level 3) Prom-M Ascents
0     1.     Fuji-san          Kanto  ...          Honshu   3776     318
1     2.    Kita-dake          Chubu  ...          Honshu   2237      31
2     3.  Hotaka-dake          Chubu  ...          Honshu   2305      23
3     4.    Aino-dake          Chubu  ...          Honshu    299      17
4     5.  Yariga-take          Chubu  ...          Honshu    432      29
..   ...          ...            ...  ...             ...    ...     ...
95   96.  Meakan-dake       Hokkaido  ...        Hokkaido   1147       7
96   97.    Amagi-san          Chubu  ...          Honshu   1004      14
97   98.   Ibuki-yama  Western Japan  ...          Honshu    657       8
98   99.  Kaimon-dake  Western Japan  ...          Kyushu    867       9
99  100.  Tsukuba-san          Kanto  ...          Honshu    797      20

【讨论】:

您好,感谢您的回复。如果我只需要前 4 列怎么办? 我修改了4列的代码 也许,我应该改写吗?我希望只得到 no., peak, section 和 elev 列。有什么办法可以删除其余的吗? 是的,有可能 只是另一个问题,我如何获得每个链接的纬度和经度?

以上是关于用 BeautifulSoup 抓取后提取单词的主要内容,如果未能解决你的问题,请参考以下文章

使用python和beautifulsoup4抓取网页后重复数据

在 BeautifulSoup 抓取之后从 Python 中的列表中提取数据,并创建 Pandas 表

BeautifulSoup抓取列表页锚文本

尝试使用 BeautifulSoup 从我的代码中使用 Xpath 进行网络抓取 [重复]

如何用beautifulsoup提取网页某个部分的所有链接? [复制]

如何使用python和beautifulsoup4循环抓取网站中多个页面的数据