首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用BeautifulSoup在Python中用下标抓取文本

用BeautifulSoup在Python中用下标抓取文本
EN

Stack Overflow用户
提问于 2016-03-15 22:20:24
回答 1查看 472关注 0票数 1

全!我正在开发我的第一个网络刮刀,当给它一个"CitedBy“页面像这样时,它从PMC抓取作者的名字、URL和纸名。

我的程序可以很好地获得作者的名字和网址,但我只能得到一些纸标题,我怀疑这是由于下标和上写。

到目前为止,我得到的是:

代码语言:javascript
复制
    import requests
    from bs4 import BeautifulSoup
    import re

    url = 'http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2593677/citedby/?page=0'
    req = requests.get(url)
    plain_text = req.text
    soup = BeautifulSoup(plain_text, "lxml") #soup object

    titles_list = []

    for items in soup.findAll('div', {'class': 'title'}):
        title = items.string
        if title is None:
            title = ("UHOH") #Problems with some titles
        #print(title)
        titles_list.append(title)

当我运行代码的这一部分时,刮板会给出以下结果:

  1. 拟南芥与番木瓜、杨树和葡萄外群的同步区: CoGe与Rosids的比较
  2. 乌霍赫
  3. 控制结瘤过程的豆科基因综合比较基因组和转录分析
  4. 乌霍赫
  5. RPL9的剂量敏感性与植物核糖体蛋白基因的协同进化

整页都是如此。

我在这一页上得到"UHOH“的一些文件是:

  • 比较细胞特异性转录谱揭示了开关草和其他C4系中C4光合作用途径的分化。
  • 近交系菊芋基因组序列的构建结合F1后代的相位感知低通测序策略
  • 拟南芥与紫花苜蓿非生物胁迫应答基因的跨家族转换基因组学

我在这里列出的前两个,我认为是有问题的,因为"C4“和"F1”实际上是"C下标4“和"F下标1”。对于第三个,“”是一个"em“HTML标签,所以我怀疑这就是为什么我的刮刀不能刮它。

我所想到的唯一替代解决方案是使我的"soup.findAll“更具体,但这并没有最终帮助我。我试过:

代码语言:javascript
复制
for items in soup.findAll('div', {'class': 'title'}):
        title = items.string
        if title is None:
            for other in soup.findAll('a', {'class': 'view'}):
                title = other.string

但遗憾的是,这不管用.所以我不太清楚该怎么处理。有人知道如何处理这种特殊情况吗?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-15 22:42:56

感谢@LukasGraf,我有答案了!

由于我使用的是BeautifulSoup,所以我可以使用案文()。它的工作原理不同于普通的".string“,因为它还返回标记下面的所有文本,这是下标和"em”标记文本的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36023346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档