为何多行文本内容最终只爬取到最后一行内容

来源:2-7 spider文件的编写(2)

lostgod

2019-06-08 00:27

老师,麻烦您看一下爬取introduce信息时,xpath写为

“.//div[@class='info']//div[@class='bd']/p[1]/text()”

然后赋值时

content_s = "".join(i_content.split())

您这边在pycharm终端中输出第一页时确实有多行内容分行提取到了,但是最后top250全部爬取时introduce只有最后一行的内容。

我完全按您的代码运行,爬取第一页时introduce就只有最后一行内容,top250全部爬取时也只有最后一行的内容。

于是我把xpath改成“.//div[@class='info']//div[@class='bd']/p[1]”,去掉了text()

然后content_s = "".join(i_content.split('<br>'))

但是这样一来虽然把多行内容都爬取到了,但是文本中又多出来空格和标签的信息,麻烦老师给个好一点的解决

办法。

写回答 关注

2回答

  • 暮日孤影
    2019-08-26 01:30:27
    已采纳

    老师的多行处理是错的,

    content = i_item.xpath(".//div[@class='info']/div[@class='bd']/p[1]//text()").extract()

    这个解析出来是一个两个元素的列表,两个元素分别是<br>的前后两段,因此下面这段代码:

    for i_content in content:
        content_s = "".join(i_content.split())
        douban_item['introduce'] = content_s

    代码的含义是,分别取出<br>的前后两段,然后去掉空格换行符等,然后存进数据库的introduce字段。这样的话第二段的数据就会覆盖第一段先存进去的数据,因此你看到了“多行文本内容最终只爬取到最后一行内容”这个结果。

    可以改成这样:

    content_s = ""
    for i_content in content:
        content_s = content_s + "".join(i_content.split())
    douban_item['introduce'] = content_s


  • 慕标9029021
    2019-10-28 13:34:32

    这样会有省略号怎么办

Python最火爬虫框架Scrapy入门与实践

做为爬虫工程师Python Scrapy主流爬虫框架你必须要会!

67418 学习 · 223 问题

查看课程

相似问题