Keekoo77 2021-04-28 20:55 采纳率: 63.6%
浏览 162
已采纳

如何用Python3爬取百度百科(最好lxml+requests,当然别的也行)?

我需要爬取的是百度百科词条简介部分

http://baike.baidu.com/item/xxx

思路:

导入模块+输入检索词+爬取词条简介部分+输出result

以下是错误代码!

from lxml import html
import requests
search_word=input('请输入检索词')
page=requests.Session().get(url='https://baike.baidu.com/item/'+search_word)
tree=html.fromstring(page.text)
result=tree.xpath('//div[@class="lemma-summary"]//a/text()')
print(result)

求大佬帮忙

  • 写回答

1条回答 默认 最新

  • 远方_流浪 2021-04-28 23:48
    关注

    基本问题,爬数的时候,模拟一下头文件浏览器打开

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36'}

    这样就可以正常拿到数据了

    完整代码如下(返回的部分是有一些html转义字符的,暂时没有去除)

    # !usr/bin/env python
    # -*-coding:utf-8 -*-
    import requests
    from lxml import etree
    import re
    
    
    def get_info(keyword: str):
        url = f'https://baike.baidu.com/item/{keyword}'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/90.0.4430.85 Safari/537.36'
        }
        try:
            r = requests.get(url, headers=headers)
            r.encoding = 'utf-8'
            tree = etree.HTML(r.text)
            divs = tree.cssselect('div.lemma-summary>.para')
            lis_text = []
            for div in divs:
                st = re.sub('<[^>]+>', '', etree.tounicode(div))
                lis_text.append(st)
            return '\n'.join(lis_text)
        except Exception as e:
            print(e)
            return 
    
    
    if __name__ == '__main__':
        keyword = 'python'
        info = get_info(keyword)
        print(info)
    

    运行结果:

    Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。
    [1] 
    Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,
    [2] 
    随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
    [3] 
    
    Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。
    [4] 
    Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
    [4] 
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示