解析库之bs4的基本使用方法

  1. '''
  2. pip install beautifulsoup4#安装bs4
  3. pip install lxml#安装lxml
  4.  
  5. '''
  6. html_doc = """
  7. <html><head><title>The Dormouse's story</title></head>
  8. <body>
  9. <p class="sister"><b>$37</b></p>
  10.  
  11. <p class="story" id="p">Once upon a time there were three little sisters; and their names were
  12. <a href="http://example.com/elsie" class="sister" >Elsie</a>,
  13. <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
  14. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  15. and they lived at the bottom of a well.</p>
  16.  
  17. <p class="story">...</p>
  18. """
  19.  
  20. from bs4 import BeautifulSoup#从bs4中导入BeautifulSoup
  21.  
  22. #调用BeautifulSoup实例化一个soup对象
  23. #参数一:解析文本
  24. #参数二:解析器(html.parser,lxml,....)
  25. soup=BeautifulSoup(html_doc,'lxml')
  26. print(soup)
  27. print('*'*100)
  28. print(type(soup))
  29.  
  30. #对其美化
  31. html=soup.prettify()
  32. print(html)

bs4之遍历文档树

  1. html_doc = """
  2. <html><head><title>The Dormouse's story</title></head><body><p class="sister"><b>$37</b></p><p class="story" id="p">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" >Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>
  3. """
  4. from bs4 import BeautifulSoup#从bs4中导入BeautifulSoup
  5. soup=BeautifulSoup(html_doc,'lxml')
  6.  
  7. '''
  8. 遍历文档树:
  9. 1、直接使用
  10. 2、获取标签的名称
  11. 3、获取标签的属性
  12. 4、获取标签的内容
  13. 5、嵌套选择
  14. 6、子节点,子孙节点
  15. 7、父节点、祖先节点
  16. 8、兄弟节点
  17. '''
  18. #1、直接使用
  19. print(soup.p)#查找第一个p标签
  20. print(soup.a)#查找第一个a标签
  21.  
  22. # 2、获取标签的名称
  23. print(soup.head.name)#获取head标签的名称
  24.  
  25. #3、获取标签的属性
  26. print(soup.a.attrs)#获取a标签中所有属性
  27. print(soup.a.attrs['href'])#获取a标签中href属性
  28.  
  29. #4、获取标签的内容
  30. print(soup.p.text) #$37
  31.  
  32. #5、嵌套选择
  33. print(soup.html.head) #<head><title>The Dormouse's story</title></head>
  34.  
  35. #6、子节点,子孙节点
  36. print(soup.body.children)#body所以子节点返回迭代器对象 <list_iterator object at 0x02C72650>
  37. print(list(soup.body.children))#强转换为list对象
  38.  
  39. print(soup.body.descendants)#子孙节点 生成器具对象
  40. print(list(soup.body.descendants))#子孙节点
  41.  
  42. #7、父节点、祖先节点
  43. print(soup.p.parent)#找p标签的父节点 为body
  44. print(soup.p.parents)#获取p标签的祖先节点
  45. print(list(soup.p.parents))#获取p标签的祖先节点
  46.  
  47. #8、兄弟节点
  48. #找到下一个兄弟
  49. print(soup.p.next_sibling)
  50. #找下面所有的兄弟
  51. print(soup.p.next_siblings) #返回生成器
  52. print(list(soup.p.next_siblings))
  53.  
  54. #找上一个兄弟
  55. print(soup.a.previous_sibling)#找a上一个兄弟节点
  56. print(soup.a.previous_siblings)#返回生成器
  57. print(list(soup.a.previous_siblings))

bs4搜索文档库的应用

  1. html_doc = """
  2. <html><head><title>The Dormouse's story</title></head>
  3. <body>
  4. <p class="sister"><b>$37</b></p>
  5.  
  6. <p class="story" id="p">Once upon a time there were three little sisters; and their names were
  7. <a href="http://example.com/elsie" class="sister" >Elsie</a>,
  8. <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
  9. <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
  10. and they lived at the bottom of a well.</p>
  11.  
  12. <p class="story">...</p>
  13. """
  14.  
  15. from bs4 import BeautifulSoup
  16. soup=BeautifulSoup(html_doc,'lxml')
  17.  
  18. #字符串过滤器
  19. #name
  20. p_tag=soup.find(name='p')
  21. print(p_tag)#根据文本p查找某个标签
  22. tag_s1 = soup.find_all(name='p')#查找所有标签名为p的节点
  23.  
  24. #attrs
  25. #查找第一个class为sister的节点
  26. p=soup.find(attrs={'class':'sister'})
  27. print(p)
  28. #查找所有class为sister的节点
  29. p=soup.find_all(attrs={'class':'sister'})
  30. print(p)
  31.  
  32. #text
  33. text=soup.find(text='$37')
  34. print(text)
  35.  
  36. #配合使用
  37. #找到一个id为link2的以及文本为Lacie的a标签
  38. a=soup.find(name='a',attrs={"id":"link2"},text='Lacie')
  39. print(a)

用python爬取豌豆荚数据

  1. '''
  2.  
  3. 下载地址:
  4. https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page=3&ctoken=lAd3GvU1DbFpJzYVdADWw9pS
  5.  
  6. https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page=4&ctoken=lAd3GvU1DbFpJzYVdADWw9pS
  7. '''
  8. from bs4 import BeautifulSoup
  9. import re
  10. import requests
  11. def get_page(url):
  12. response=requests.get(url)
  13. return response
  14.  
  15. #app名称
  16.  
  17. #2、开始解析
  18.  
  19. #解析详情页
  20. def parse_detail(text):
  21. soup=BeautifulSoup(text,'lxml')
  22.  
  23. #app名称
  24. name=soup.find(name='span',attrs={"class":"title"}).text
  25. print(name)
  26.  
  27. #好评率
  28. love=soup.find(name='span',attrs={"class":"love"}).text
  29. print(love)
  30.  
  31. #评论数
  32. commit_num=soup.find(name='a',attrs={"class":"comment-open"}).text
  33. print(commit_num)
  34.  
  35. #小编点评
  36. commit_content = soup.find(name='div', attrs={"class": "con"}).text
  37. print(commit_content)
  38.  
  39. #app下载链接
  40. download_url = soup.find(name='a', attrs={"class": "normal-dl-btn"}).attrs['href']
  41. print(download_url)
  42.  
  43. #解析主页
  44. def parse_index(data):
  45. soup = BeautifulSoup(data, 'lxml')
  46. '''
  47. 图标地址
  48. <li data-pn="com.casual.game.jump" class="card" data-suffix=""><div class="icon-wrap"><a href="https://www.wandoujia.com/apps/com.casual.game.jump"> <img src="https://android-artworks.25pp.com/fs08/2018/07/11/9/109_2154e564e7823981ae2cde0102547db1_con_130x130.png" data-original="https://android-artworks.25pp.com/fs08/2018/07/11/9/109_2154e564e7823981ae2cde0102547db1_con_130x130.png" alt="Jump Jump Go" class="icon lazy" width="68" height="68" style=""> </a></div><div class="app-desc"><h2 class="app-title-h2"><a href="https://www.wandoujia.com/apps/com.casual.game.jump" title="Jump Jump Go" class="name">Jump Jump Go</a></h2><div class="meta"> <a rel="nofollow" class="tag gooddev" href="https://www.wandoujia.com/manual_testing?from=www" target="_blank" title="编辑亲测基本可用,无明显恶意行为。"></a> <span class="install-count">6540人安装</span> <span class="dot">・</span> <span title="5.22MB">5.22MB</span></div><div class="comment"> Jump Jump (跳一跳) was the most popular puzzle game i </div></div> <a class="tag-link" href="https://www.wandoujia.com/category/6001?pos=w/cardtag/gamecategory_com.casual.game.jump">休闲益智</a> <a data-app-id="7837882" data-app-vid="300445168" data-app-name="Jump Jump Go" data-app-pname="com.casual.game.jump" data-app-vcode="8" data-app-vname="1.08" data-app-categoryid="6001" data-app-subcategoryid="" data-app-icon="https://android-artworks.25pp.com/fs08/2018/07/11/9/109_2154e564e7823981ae2cde0102547db1_con_130x130.png" data-app-rtype="1" data-app-requireid="1" class="detail-check-btn" href="https://www.wandoujia.com/apps/com.casual.game.jump">查看 </a> </li>
  49. '''
  50. app_list=soup.find_all(name='li',attrs={"class":"card"})
  51. for app in app_list:
  52. #print("tank"*1000)
  53. print(app)
  54. #图标地址
  55. #获取第一个标签中的data-original属性
  56. img=app.find(name='img').attrs['data-original']
  57. print(img)
  58.  
  59. #下载次数
  60. #获取class为install-count的span标签中的文本
  61. down_num=app.find(name='span',attrs={"class":"install-count"}).text
  62. print(down_num)
  63.  
  64. #大小
  65. #根据文本正则获取到文本中包含 数字加MB(\d代表数字)的span标签中的文本
  66. size=soup.find(name='span',text=re.compile("\d+MB")).text
  67. print(size)
  68.  
  69. #详情页地址
  70. #直接获取第一个a标签并提取href值
  71. detail_url=app.find(name='a').attrs['href']
  72. print(detail_url)
  73.  
  74. # 3往app详情页发送请求
  75. response = get_page(detail_url)
  76.  
  77. #4解析app详情页
  78. parse_detail(response.text)
  79.  
  80. def main():
  81. for line in range(1,33):
  82. #1、往app接口发送请求
  83. url=f'https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page={line}&ctoken=lAd3GvU1DbFpJzYVdADWw9pS'
  84. response=get_page(url)
  85. #print(response.text)
  86. print("*"*1000)
  87. #反序列化为字典
  88. data=response.json()#json必须是双引号
  89. #获取App接口书局
  90. app_li=data['data']['content']
  91. print(app_li)
  92.  
  93. #解析app标签数据
  94. parse_index(app_li)
  95.  
  96. if __name__ == '__main__':

pymongo的简单使用

  1. from pymongo import MongoClient
  2.  
  3. #1连接mongoDB客户端
  4. #参数1:mongoDB的ip地址
  5. #参数2:mongoDB的端口号 默认:27017
  6. client=MongoClient('localhost',27017)
  7. print(client)
  8.  
  9. #2、进入zmm_db库,没有则创建
  10. print(client['zmm_db'])
  11.  
  12. #3、创建集合
  13. client['zmm_db']['people']
  14.  
  15. #4、给zmm_db库插入数据
  16. #1、插入一条
  17. data1={
  18. 'name':'zmm',
  19. 'age':'',
  20. 'sex':'female'
  21. }
  22. client['zmm_db']['people'].insert(data1)
  23.  
  24. #2、插入多条
  25. data1={
  26. 'name':'zmm',
  27. 'age':'',
  28. 'sex':'female'
  29. }
  30. data2={
  31. 'name':'lyj',
  32. 'age':'',
  33. 'sex':'female'
  34. }
  35. data3={
  36. 'name':'zcj',
  37. 'age':'',
  38. 'sex':'female'
  39. }
  40. client['zmm_db']['people'].insert([data1,data2,data3])
  41.  
  42. #5、查数据
  43. data_s=client['zmm_db']['people'].find()
  44. for data in data_s:
  45. print(data)
  46.  
  47. #差看一条数据
  48. print(client['zmm_db']['people'].find_one())
  49.  
  50. #官方推荐使用
  51. #插入一条inser_one
  52. client['zmm_db']['people'].insert_one()
  53. #插入多条inser_many
  54. client['zmm_db']['people'].insert_many()

有关命令的作用

  1. 1BeautifulSoup解析库
  2. 2MongoDB存储库
  3. 3requests-html 请求库
  4.  
  5. BeautifulSoup
  6. 1、什么是bs4
  7. 是一个基于re开发的解析库,可以提供一些强大的及解析功能.
  8. 提高提取数据的效率与爬虫开发效率
  9.  
  10. 2、安装与使用
  11. pip install beaytifulsoup4
  12.  
  13. MongoDB
  14.  
  15. 1、下载安装
  16. 2、在C盘创建一个data/db文件夹
  17. -数据的存放路径
  18. 3、输入mongod启动服务
  19. 进入终端cmd(以管理员身份),输入mongod启动MongoDB服务
  20.  
  21. 4mongo进入MongoDB客户端
  22. 打开一个新的终端cmd(以管理员身份),输入mongo进入客户端

  23. 数据库操作:
  24. 切换库:
  25. SQL
  26. use admin;有则切换,无则报错
  27. MongoDB
  28.  
  29. use zmm;有则切换,无则创建,并切换到zmm库中
  30.  
  31. 查数据库
  32. SQL:
  33. show databases;
  34. MongoDB
  35. show dbs;显示的数据库若无数据则不显示
  36.  
  37. 删除库:
  38. SQL:
  39. drop database;
  40. MongoDB
  41. db.dropDatabase()
  42.  
  43. 集合操作:MySQL中叫做表
  44. SQL:
  45. create table f1,f2.....
  46. MongoDB
  47. #在当前库中通过点来创建集合
  48. db.student
  49.  
  50. 插入数据:
  51. #插入多条数据
  52. db.student.insert([{"name1":"tank1"},{"name2":"tank2"}])
  53. #插入一条name为zmm的数据
  54. db.student.insert({"name":"zmm"})
  55. #结果为WriteResult({ "nInserted" : 1 })
  56.  
  57. 查数据:
  58. #查找student集合中所有数据
  59. db.student.find({})
  60. #结果{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }
  61.  
  62. #查看结果
  63. db.student.find({})
  64. #结果如下
  65. #{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }
  66. #{ "_id" : ObjectId("5d0b393914466bde5bc647c6"), "name1" : "tank1" }
  67. #{ "_id" : ObjectId("5d0b3a0214466bde5bc647c7"), "name1" : "tank1" }
  68. #{ "_id" : ObjectId("5d0b3a0214466bde5bc647c8"), "name2" : "tank2" }
  69.  
  70. #查一条 查找name为zmm的记录
  71. #结果{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }

通过本次学习,学习到python的更多知识,特别开心

python学习第八天的更多相关文章

  1. python学习第八天 -- 迭代

    什么是迭代? 在python语言中,迭代的意思就是通过for循环遍历一个有序/无序的集合. 迭代是通过 for x in 集合 来完成的. 前面有提到python中有哪些集合,现在我们来梳理一下: ( ...

  2. python学习第八天二进制和字符编码有关联

    计算机所能识别只有0,1这两种状态,但是我们人类用字母,汉字,还有其他语言,那么怎么和计算机进行沟通呢,python编程语言最早unicode,现在统一用utf8,UTF8通用的编码语言,所有语言都包 ...

  3. Python学习第八天(os)

    os主要是实现文件夹的创建和管理功能 os.mkdir(path) 创建目录 os.chdir(path)改变当前工作目录 os.fchdir() 通过文件描述符改变工作目录 os.chroot() ...

  4. python学习第八天--异常和异常处理

    Exception 常用异常: AssertionError 断言语句失败 AttributeError 尝试访问未知的对象属性 IndexError 索引超出序列值 keyError 查找一个不存在 ...

  5. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  6. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  7. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  8. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  9. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

随机推荐

  1. SpringCloud微服务:基于Nacos组件,整合Dubbo框架

    源码地址:GitHub·点这里 || GitEE·点这里 一.基础组件简介 1.Dubbo框架 Dubbo服务化治理的核心框架,之前几年在国内被广泛使用,后续由于微服务的架构的崛起,更多的公司转向微服 ...

  2. ES6 面向对象笔记

    JS面向对象两大编程思想 面向过程 面向对象 面向过程编程POP         面向过程就是分析出问题的需要步骤,然后用函数一步一步的实现,使用的时候一个一个调用就可以了 面向对象编程OOP     ...

  3. 基于OpenSIPS做注册服务下,场景A打B,一方发起BYE挂断后收到500,另一方无法挂断的问题

    基于OpenSIPS做注册服务下,场景A打B,一方发起BYE挂断后收到500,另一方无法挂断的问题     最近在工作中遇到一个看似很奇怪的,排除起来很费劲,但最后的解决方式又及其简单的问题,下面我们 ...

  4. 【JAVA】java中int转成String位数不足前面补零例如:1->001

    String.format("%03d", 1); 0代表前面要补的字符3代表字符串长度d表示参数为整数类型 测试完数据:循环了100次 截取了一部分:

  5. JavaScript 手写setTimeout

    let setTimeout = (sec, num) => { // 初始当前时间 const now = new Date().getTime() let flag = true let c ...

  6. 通过实际案例摸清楚Spring事务传播的行为

    @ 目录 事务传播 案例准备 案例解析 1.无事务 2. Propagation.REQUIRED 3. Propagation.SUPPORTS 4. Propagation.MANDATORY 5 ...

  7. Linux学习笔记 一 第二章 Linux系统安装

    Linux系统安装 一.首先安装VMware 虚拟机 下载网址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-e ...

  8. 【UVa1635】Irrelevant Elements - 唯一分解定理

    题意 给你 \(n\) 个数,每次求出相邻两个数的和组成新数列.经过 \(n-1\) 次操作后,得到一个数.求这个数 \(mod \ m\) 与哪些项无关. 如:当 \(m=2 \ , \ n=2\) ...

  9. Debug很重要

    之前做一个小功能,就是用php发送邮件,项目中已经使用了wordpress的wp_mail,所以同事建议我继续用wp_mail函数. 然而遇到了一个奇怪的情况,邮件没有发出去,也没有任何报错日志. 照 ...

  10. windows 服务端 狼人杀 发牌器 开发完成 待继续开发其他服务

    开发工具: python2.7 eric4 成果链接地址 https://wws.lanzous.com/iPCDTfnuoif