首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有些html标签在抓取时是看不见的?

为什么有些html标签在抓取时是看不见的?
EN

Stack Overflow用户
提问于 2019-10-24 00:43:18
回答 2查看 72关注 0票数 1

我正在尝试从here中抓取文本以直接输入到excel工作表中,而不是复制和粘贴。该网站使用Html来包含有关原始字体的信息。这是一个如何在页面上编码一行文本的示例:

代码语言:javascript
复制
<div class="line">
    <span class="milestone_wrap"> </span>
    <a id="tln-2212" href="index.html#tln-2212" class="milestone tln invisible" title="TLN: 2212">2212</a>
    <span class="milestone_wrap">When </span>
    <span class="typeform" data-setting="ſ">s</span>
    <span class="milestone_wrap">uch ill dealing mu</span>
    <span class="ligature" data-precomposed="ſt">
        <span class="typeform" data-setting="ſ">s</span>
        <span class="milestone_wrap">t</span>
    </span>
    <span class="milestone_wrap"> be </span>
    <span class="typeform" data-setting="ſ">s</span>
    <span class="milestone_wrap">eene in thought. </span>
    <span class="sd exit">
        <span class="space" style="padding-right:1em;" xml:space="preserve"></span>
        <i>Exit</i>
        <span class="milestone_wrap">.</span>
    </span>
</div>

我尝试过使用find_all方法

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup as bs
url = 'https://internetshakespeare.uvic.ca/doc/R3_F1/scene/3.6/index.html'
page = requests.get(url)
text = bs(page.text, 'html.parser')

divs = text.find_all('div', class_="line")
for div in divs:
    for item in div.contents: print(item)

这是我得到的结果:

代码语言:javascript
复制
When 
<span class="typeform" data-setting="ſ">s</span>
uch ill dealing mu
<span class="ligature" data-precomposed="ſt"><span class="typeform" data-setting="ſ">s</span>t</span>
 be 
<span class="typeform" data-setting="ſ">s</span>
eene in thought. 
<span class="sd exit"><span class="space" style="padding-right:1em;" xml:space="preserve"> </span><i>Exit</i>.</span>

所有带有<span class="milestone_wrap">标记的内容都没有标记:因此,当我使用.find_all表示“span”时,这些字符串就不会出现,所以我只剩下随机的字母。这个类没有出现有什么原因吗?

EN

回答 2

Stack Overflow用户

发布于 2019-10-24 10:41:49

line类级别工作,但分解a标记,以便删除行号;除非您确实需要它们,在这种情况下,我会在它们和下面的文本之间添加空格:

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

r = requests.get('https://internetshakespeare.uvic.ca/doc/R3_F1/scene/3.6/index.html')
soup = bs(r.content, 'lxml')

for line in soup.select('.line'):
    line.select_one('a').decompose()
    print(line.text)
票数 1
EN

Stack Overflow用户

发布于 2019-10-24 01:16:25

在执行代码时稍作调整(必须导入requests模块),您应该会得到站点的内容。

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

url = 'https://internetshakespeare.uvic.ca/doc/R3_F1/scene/3.6/index.html'
page = requests.get(url)
text = bs(page.text, 'html.parser')

divs = text.find_all('div', class_="line")
for div in divs:
    for item in div.contents: print(item)

文本可以在<span class="milestone_wrap">标记中找到。你可以用浏览器的检查器来检查。文本以一小部分标签的形式递送,例如“其中在一个”。您应该能够提取文本。

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

https://stackoverflow.com/questions/58527536

复制
相关文章

相似问题

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