【问题标题】:Extracting/Scraping text from a href inside p inside div从div内p内的href中提取/抓取文本
【发布时间】:2014-03-02 02:44:18
【问题描述】:

我正在使用漂亮的汤(bs4)和 Python 我目前有这个结构

<div class="class1">
  <a class="name" href="/doctor/dr-xxxxxxxxx"><h2>Dr. XX XXXX</h2></a>
  <p class="specialties"><a href="/location/abcd">ab cd</a></p>
  <p class="doc-clinic-name">
     <a class="light_grey link" href="/clinic/fff">f ff</a>
  </p>
</div>


<div class="class2">
  <p class="locality">
    <a class="link grey" href="/location/doctors/ccc">c cc</a>
  </p>
  <p class="fees">INR 999</p>
  <div class="timings">
       <p><span class="strong">MON-SAT</span><br/><span>11:00AM-1:00PM</span>                                   <span>6:00PM-8:00PM</span></p>
  <div class="clear"></div>
</div>

到目前为止我的代码是这样的

import urllib2
from bs4 import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen('abc.com').read())

 for post in soup.find("div", "class1"):
print post

for x in soup.find("div", "class2"):
    print x 

所以基本上 post 和 x 包含 div 类 1 和类 2。现在我要提取的信息是

DR.XXXXXX A B C D fff ccc 999 卢比 周一至周六 11:00 AM-1:00 PM

如何在 post 和 x 变量中进行分支以获取所需的信息。谢谢

编辑

我在 html 中添加了空格。是否可以在不损害空间的情况下生成格式的 csv? 博士。 XX XXXX,ab cd,f ff,c cc,INR 999,周一至周六 11:00AM-1:00PM

【问题讨论】:

    标签: python html web-scraping beautifulsoup screen-scraping


    【解决方案1】:
    >>> ' '.join(soup.find("div", "class1").getText().split())
    u'Dr. XXXXXX abcd fff'
    >>> ' '.join(soup.find("div", "class2").getText().split())
    u'ccc INR 999 MON-SAT11:00AM-1:00PM 6:00PM-8:00PM'
    

    【讨论】:

    • 有什么办法可以在不同的条目之间引入逗号,使其成为 csv 格式
    【解决方案2】:

    首先,您的缩进看起来不对。其次,我认为您在使用 find 时不需要 for 循环,因为它应该只返回第一个匹配项。

    如果你只想要链接,你可以试试:

    for link in soup.find("div", {"class": "class1"}).findAll("a"):
      print link.text
    

    或者,如果你想要链接本身:

    for link in soup.find("div", {"class": "class1"}).findAll("a"):
      print link.get("href")
    

    您还应该注意用于搜索类的方法,通过将 dict 传递给 find 方法(编辑:我怀疑还有其他方法可以做到这一点。这正是我学会的方法! )

    因此,您可以尽可能具体,例如

    doctorlink = soup.find(("div", {"class": "class1"}).find("a", {"class": "name"})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2019-11-09
      • 2016-08-12
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 2015-01-05
      相关资源
      最近更新 更多