python - 使用beautifulsoup时,无法找到特定标签内容?
ringa_lee
ringa_lee 2017-04-18 09:04:26
[Python讨论组]

目的:在网页 https://movie.douban.com/tv/#!type=tv&tag=%E8%8B%B1%E5%89%A7&sort=rank&page_limit=20&page_start=0上抓取评分超过x的所有英剧。
问题:在得到网页内容后,无法用find_all 方法找到

部分网页源码

程序代码(问题部分)

#-*-coding:utf-8-*-
from bs4 import BeautifulSoup
import urllib2


def get_text(x):
    soup = BeautifulSoup(x, "html.parser", from_encoding="utf-8")
    # print soup
    texts_1 = soup.find_all("a", class_="item")
    print type(texts_1)
    print len(texts_1)
    print texts_1
    texts_2 = soup.find_all("script", id="subject-tmpl")
    print type(texts_2)
    print len(texts_2)
    print texts_2
    texts_3 = soup.find_all("p", class_="cover-wp")
    print type(texts_3)
    print len(texts_3)
    print texts_3
urls = {"电影": "https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=rank&page_limit=20&page_start=0",
        "英剧": "https://movie.douban.com/tv/#!type=tv&tag=%E8%8B%B1%E5%89%A7&sort=rank&page_limit=20&page_start=0",
        "美剧": "https://movie.douban.com/tv/#!type=tv&tag=%E7%BE%8E%E5%89%A7&sort=rank&page_limit=20&page_start=0"}

content = urllib2.urlopen(urls["英剧"]).read()
# print content
get_text(content)

输出结果


0
[]

1
[]

0
[]
[Finished in 0.9s]

截图

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
ringa_lee
    <script type="text/tmpl" id="subject-info-tmpl">
        <p class="wp">

你看代码就知道,这个p标签在js代码块中,得运行js代码后,才能成为DOM节点的一部分。
但是你只读取HTML源码,并没有执行其中的js代码。
所以beautifulsoup用的HTML解析器并不认为 p class=”wp” 是DOM树的一部分,find_all也就没有结果。

解决方法的话,你直接写个正则匹配比较好,用bs4恐怕是不行。
至于正则怎么写,你可以看《正则表达式必知必会》这本书,10分钟就可以搞定了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号