【问题标题】:Extracting text under a certain section from a source code of a url using BeautifulSoup in python在python中使用BeautifulSoup从url的源代码中提取某个部分下的文本
【发布时间】:2021-08-23 15:37:37
【问题描述】:

我是 python 的初学者,对 HTML 没有任何经验。我刚刚看到一个关于网络抓取的 youtube 视频 (https://www.youtube.com/watch?v=kEItYHtqQUg&ab_channel=edureka%21),并对从 python 中的 URL 提取文本感兴趣。

我尝试从随机数据库中练习它的链接。这是我使用的 URL 和代码 https://rtk.rjifuture.org/rmp/facility/100000028301

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = "https://rtk.rjifuture.org/rmp/facility/100000028301"
html = urlopen(url)

soup = BeautifulSoup(html, "html.parser")
type(soup)

all_links = soup.findAll('div', {'class': 'col'})
str_cells = str(all_links)
cleartext = BeautifulSoup(str_cells, "html.parser").get_text().split(',')

假设我想提取位置下的地址。通过使用上面的代码,我可以通过print(cleartext[7])得到地址

但是当我尝试使用同一数据库中的另一个链接(如https://rtk.rjifuture.org/rmp/facility/100000083214)进行相同操作时, 它的效果不如网页的第一部分(设施名称下方的部分)的结构略有不同。当地址之前的一个数据中有 , 时,这也不能很好地工作。

有没有办法定位位置部分下的地址并从中提取文本?

【问题讨论】:

    标签: python html url beautifulsoup scrape


    【解决方案1】:

    对于 URL 1,您可以首先根据给定的类查找所有 div,并根据该查找位置 div 查找索引并使用 get_text() 方法提取数据

    import requests
    from bs4 import BeautifulSoup
    res=requests.get("https://rtk.rjifuture.org/rmp/facility/100000028301")
    soup=BeautifulSoup(res.text,"html.parser")
     
    
    soup.find_all("div",class_="container-fluid rmp-section")[1].find("div",class_="col").get_text(strip=True)
    

    输出:

    '308 Timmons StreetSnow Hill, MD 21863'
    

    网址 2:

    import requests
    from bs4 import BeautifulSoup
    res=requests.get("https://rtk.rjifuture.org/rmp/facility/100000083214")
    soup=BeautifulSoup(res.text,"html.parser")
    soup.find_all("div",class_="container-fluid rmp-section")[1].find("div",class_="col").get_text(strip=True)
    

    输出:

    '2.5 miles E of Hwy 59 on Co. Rd VKit Carson, CO 80825'
    

    【讨论】:

    • 谢谢!这正是我想要的。请问find("div",class_="col")这部分为什么能找到地址?我可以看到“container-fluid rmp-section”)[1] 下有很多“col”,并且无法弄清楚它是如何返回地址的。我想更具体一点,如果我想提取“描述”旁边的文本,即“设施中心”,我该怎么办?
    • 看看它做了什么,首先根据container-fluid rmp-section这个类找到所有div基于类col查找元素,find方法总是返回第一个匹配元素
    • 哦,我明白了。我想我应该使用find_all 在该部分中查找其他信息。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2017-12-23
    • 2014-07-25
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多