scrapy无法使用xpath解析?特殊网页的信息提取(1) — 百度贴吧

scrapy无法使用xpath解析?特殊网页的信息提取(1) — 百度贴吧

1. 背景

  • 最近在使用scrapy爬取百度贴吧帖子内容时,发现用xpath无法解析到页面元素。但是利用xpath helper这个插件,很明显可以看到xpath路径是没有问题的。
    这里写图片描述
articleList = response.xpath("//li[contains(@class, 'j_thread_list')]")
print(f"articleList = {articleList}")
# 输出结果为:articleList = []
print(f"text = {response.text}")
  • 大致看了一下,发现页面内容和审查元素页面的内容基本上一致,不像是传统的页面框架+ js渲染模式,完全摸不着头脑到底是怎么回事,为什么xpath无法提取到相关的内容。

2. 环境

  • python 3.6.1
  • 系统:win7
  • IDE:pycharm
  • scrapy框架

3. 分析过程

  • 试了很多次,各种重写xpath路径,还是不管用。然后我试着提取所有的div元素:
articleList = response.xpath("//div")
print(f"articleList = {articleList}")
# 输出结果为:articleList = [XXXXXX.........]
  • 发现,结果中提取出来的元素很少。但是能提取到元素,这也说明scrapy中的xpath是起作用的。问题应该是出在网页内容本身上,当时在想,原因可能有两个:
    • 第一,xpath路径不对,网页内容有隐藏的陷阱,这在前篇文章中提到过一些。
    • 第二,网页结构混乱,缺少一些标签,导致xpath无法识别。
  • 仔细分析这个网页源码,终于被我发现了……要提取的这部分网页内容,显示的颜色是绿色的(字符串的颜色),而标签的颜色是紫色的
    这里写图片描述
  • 最终发现,原来核心的网页内容是以字符串的形式,被包含在< code >这个标签中。非常非常的隐蔽!!!(我猜写这个页面的人一定是盗贼属性)
    这里写图片描述
  • 类似于这样子:
<code class="pagelet_html" id="pagelet_html_frs-list/pagelet/thread_list" style="display:none;">

<!--
<ul id="thread_list" class="threadlist_bright j_threadlist_bright">
    <li class=" j_thread_list clearfix" data-field='{&quot;id&quot;:1795630165,&quot;author_name&quot;:&quot;\u7f8e\u7eaf\u8f76&quot;,&quot;first_post_id&quot;:23158535830,&quot;reply_num&quot;:8,&quot;is_bakan&quot;:null,&quot;vid&quot;:&quot;&quot;,&quot;is_good&quot;:true,&quot;is_top&quot;:null,&quot;is_protal&quot;:null,&quot;is_membertop&quot;:null,&quot;is_multi_forum&quot;:null,&quot;frs_tpoint&quot;:null}' >
            <div class="t_con cleafix">
                            <div class="col2_left j_threadlist_li_left">

                        <span class="threadlist_rep_num center_text"
                            title="回复">8</span>
                            </div>
                <div class="col2_right j_threadlist_li_right ">
            <div class="threadlist_lz clearfix">
                <div class="threadlist_title pull_left j_th_tit 
">


    <a rel="noreferrer"  href="/p/1795630165" title="去北京看了一场球赛" target="_blank" class="j_th_tit ">去北京看了一场球赛</a>
</div><div class="threadlist_author pull_right">
    <span class="tb_icon_author "
          title="主题作者: 美纯轶"
          data-field='{&quot;user_id&quot;:3464099}' ><i class="icon_author"></i><span class="frs-author-name-wrap"><a rel="noreferrer"  data-field='{&quot;un&quot;:&quot;\u7f8e\u7eaf\u8f76&quot;}' class="frs-author-name j_user_card " href="/home/main/?un=%E7%BE%8E%E7%BA%AF%E8%BD%B6&ie=utf-8&fr=frs" target="_blank">美纯轶</a></span><span class="icon_wrap  icon_wrap_theme1 frs_bright_icons "></span>    </span>
    <span class="pull-right is_show_create_time" title="创建时间">2013-10</span>
</div>
            </div>
                      
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值