python学习第八天

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

‘‘‘
pip install beautifulsoup4#安装bs4
pip install lxml#安装lxml

‘‘‘
html_doc = """
<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>
"""

from bs4 import BeautifulSoup#从bs4中导入BeautifulSoup

#调用BeautifulSoup实例化一个soup对象
#参数一:解析文本
#参数二:解析器(html.parser,lxml,....)
soup=BeautifulSoup(html_doc,‘lxml‘)
print(soup)
print(‘*‘*100)
print(type(soup))

#对其美化
html=soup.prettify()
print(html)

bs4之遍历文档树

html_doc = """
<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>
"""
from bs4 import BeautifulSoup#从bs4中导入BeautifulSoup
soup=BeautifulSoup(html_doc,‘lxml‘)

‘‘‘
遍历文档树:
    1、直接使用
    2、获取标签的名称
    3、获取标签的属性
    4、获取标签的内容
    5、嵌套选择
    6、子节点,子孙节点
    7、父节点、祖先节点
    8、兄弟节点
‘‘‘
#1、直接使用
print(soup.p)#查找第一个p标签
print(soup.a)#查找第一个a标签

# 2、获取标签的名称
print(soup.head.name)#获取head标签的名称

#3、获取标签的属性
print(soup.a.attrs)#获取a标签中所有属性
print(soup.a.attrs[‘href‘])#获取a标签中href属性

#4、获取标签的内容
print(soup.p.text)  #$37

#5、嵌套选择
print(soup.html.head)  #<head><title>The Dormouse‘s story</title></head>

#6、子节点,子孙节点
print(soup.body.children)#body所以子节点返回迭代器对象 <list_iterator object at 0x02C72650>
print(list(soup.body.children))#强转换为list对象

print(soup.body.descendants)#子孙节点 生成器具对象
print(list(soup.body.descendants))#子孙节点

#7、父节点、祖先节点
print(soup.p.parent)#找p标签的父节点 为body
print(soup.p.parents)#获取p标签的祖先节点
print(list(soup.p.parents))#获取p标签的祖先节点

#8、兄弟节点
#找到下一个兄弟
print(soup.p.next_sibling)
#找下面所有的兄弟
print(soup.p.next_siblings) #返回生成器
print(list(soup.p.next_siblings))

#找上一个兄弟
print(soup.a.previous_sibling)#找a上一个兄弟节点
print(soup.a.previous_siblings)#返回生成器
print(list(soup.a.previous_siblings))

bs4搜索文档库的应用

html_doc = """
<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>
"""

from bs4 import BeautifulSoup
soup=BeautifulSoup(html_doc,‘lxml‘)

#字符串过滤器
#name
p_tag=soup.find(name=‘p‘)
print(p_tag)#根据文本p查找某个标签
tag_s1 = soup.find_all(name=‘p‘)#查找所有标签名为p的节点

#attrs
#查找第一个class为sister的节点
p=soup.find(attrs={‘class‘:‘sister‘})
print(p)
#查找所有class为sister的节点
p=soup.find_all(attrs={‘class‘:‘sister‘})
print(p)

#text
text=soup.find(text=‘$37‘)
print(text)

#配合使用
#找到一个id为link2的以及文本为Lacie的a标签
a=soup.find(name=‘a‘,attrs={"id":"link2"},text=‘Lacie‘)
print(a)

用python爬取豌豆荚数据

‘‘‘

下载地址:
    https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page=3&ctoken=lAd3GvU1DbFpJzYVdADWw9pS

    https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page=4&ctoken=lAd3GvU1DbFpJzYVdADWw9pS
‘‘‘
from bs4 import BeautifulSoup
import re
import requests
def get_page(url):
    response=requests.get(url)
    return response

    #app名称

#2、开始解析

#解析详情页
def parse_detail(text):
    soup=BeautifulSoup(text,‘lxml‘)

    #app名称
    name=soup.find(name=‘span‘,attrs={"class":"title"}).text
    print(name)

    #好评率
    love=soup.find(name=‘span‘,attrs={"class":"love"}).text
    print(love)

    #评论数
    commit_num=soup.find(name=‘a‘,attrs={"class":"comment-open"}).text
    print(commit_num)

    #小编点评
    commit_content = soup.find(name=‘div‘, attrs={"class": "con"}).text
    print(commit_content)

    #app下载链接
    download_url = soup.find(name=‘a‘, attrs={"class": "normal-dl-btn"}).attrs[‘href‘]
    print(download_url)

#解析主页
def parse_index(data):
    soup = BeautifulSoup(data, ‘lxml‘)
    ‘‘‘
    图标地址
    <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>
    ‘‘‘
    app_list=soup.find_all(name=‘li‘,attrs={"class":"card"})
    for app in app_list:
        #print("tank"*1000)
        print(app)
        #图标地址
        #获取第一个标签中的data-original属性
        img=app.find(name=‘img‘).attrs[‘data-original‘]
        print(img)

        #下载次数
        #获取class为install-count的span标签中的文本
        down_num=app.find(name=‘span‘,attrs={"class":"install-count"}).text
        print(down_num)

        #大小
        #根据文本正则获取到文本中包含  数字加MB(\d代表数字)的span标签中的文本
        size=soup.find(name=‘span‘,text=re.compile("\d+MB")).text
        print(size)

        #详情页地址
        #直接获取第一个a标签并提取href值
        detail_url=app.find(name=‘a‘).attrs[‘href‘]
        print(detail_url)

        # 3往app详情页发送请求
        response = get_page(detail_url)

        #4解析app详情页
        parse_detail(response.text)

def main():
    for line in range(1,33):
        #1、往app接口发送请求
        url=f‘https://www.wandoujia.com/wdjweb/api/category/more?catId=6001&subCatId=0&page={line}&ctoken=lAd3GvU1DbFpJzYVdADWw9pS‘
        response=get_page(url)
        #print(response.text)
        print("*"*1000)
        #反序列化为字典
        data=response.json()#json必须是双引号
        #获取App接口书局
        app_li=data[‘data‘][‘content‘]
        print(app_li)

        #解析app标签数据
        parse_index(app_li)

if __name__ == ‘__main__‘:

pymongo的简单使用

from pymongo import MongoClient

#1连接mongoDB客户端
#参数1:mongoDB的ip地址
#参数2:mongoDB的端口号 默认:27017
client=MongoClient(‘localhost‘,27017)
print(client)

#2、进入zmm_db库,没有则创建
print(client[‘zmm_db‘])

#3、创建集合
client[‘zmm_db‘][‘people‘]

#4、给zmm_db库插入数据
#1、插入一条
data1={
    ‘name‘:‘zmm‘,
    ‘age‘:‘20‘,
    ‘sex‘:‘female‘
}
client[‘zmm_db‘][‘people‘].insert(data1)

#2、插入多条
data1={
    ‘name‘:‘zmm‘,
    ‘age‘:‘20‘,
    ‘sex‘:‘female‘
}
data2={
    ‘name‘:‘lyj‘,
    ‘age‘:‘30‘,
    ‘sex‘:‘female‘
}
data3={
    ‘name‘:‘zcj‘,
    ‘age‘:‘21‘,
    ‘sex‘:‘female‘
}
client[‘zmm_db‘][‘people‘].insert([data1,data2,data3])

#5、查数据
data_s=client[‘zmm_db‘][‘people‘].find()
for data in data_s:
    print(data)

#差看一条数据
print(client[‘zmm_db‘][‘people‘].find_one())

#官方推荐使用
#插入一条inser_one
client[‘zmm_db‘][‘people‘].insert_one()
#插入多条inser_many
client[‘zmm_db‘][‘people‘].insert_many()

有关命令的作用

1、BeautifulSoup解析库
2、MongoDB存储库
3、requests-html 请求库

BeautifulSoup
1、什么是bs4?
    是一个基于re开发的解析库,可以提供一些强大的及解析功能.
    提高提取数据的效率与爬虫开发效率

2、安装与使用
    pip install beaytifulsoup4

MongoDB

1、下载安装
2、在C盘创建一个data/db文件夹
    -数据的存放路径
3、输入mongod启动服务
    进入终端cmd(以管理员身份),输入mongod启动MongoDB服务

4、mongo进入MongoDB客户端
    打开一个新的终端cmd(以管理员身份),输入mongo进入客户端
二
数据库操作:
切换库:
SQL:
    use admin;有则切换,无则报错
MongoDB

    use zmm;有则切换,无则创建,并切换到zmm库中

查数据库
SQL:
    show databases;
MongoDB:
    show dbs;显示的数据库若无数据则不显示

删除库:
SQL:
    drop database;
MongoDB:
    db.dropDatabase()

集合操作:MySQL中叫做表
SQL:
    create table f1,f2.....
MongoDB:
    #在当前库中通过点来创建集合
    db.student

插入数据:
    #插入多条数据
    db.student.insert([{"name1":"tank1"},{"name2":"tank2"}])
    #插入一条name为zmm的数据
     db.student.insert({"name":"zmm"})
    #结果为WriteResult({ "nInserted" : 1 })

查数据:
    #查找student集合中所有数据
    db.student.find({})
    #结果{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }

    #查看结果
      db.student.find({})
    #结果如下
    #{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }
    #{ "_id" : ObjectId("5d0b393914466bde5bc647c6"), "name1" : "tank1" }
    #{ "_id" : ObjectId("5d0b3a0214466bde5bc647c7"), "name1" : "tank1" }
    #{ "_id" : ObjectId("5d0b3a0214466bde5bc647c8"), "name2" : "tank2" }

    #查一条  查找name为zmm的记录
    #结果{ "_id" : ObjectId("5d0b381114466bde5bc647c5"), "name" : "zmm" }

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

原文地址:https://www.cnblogs.com/zmmm/p/11067379.html

时间: 2024-10-13 22:36:48

python学习第八天的相关文章

Python学习第八天——学校(类的继承)

1 #coding=utf-8 2 #Version:python 3.6.0 3 #Tools:Pycharm 2017.3.2 4 _date_ = '2018/4/25/025 21:02' 5 6 class school(object): 7 def __init__(self,name,addr): 8 self.name = name 9 self.addr = addr 10 self.students = [] 11 self.teachers = [] 12 self.sta

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

计算机所能识别只有0,1这两种状态,但是我们人类用字母,汉字,还有其他语言,那么怎么和计算机进行沟通呢,python编程语言最早unicode,现在统一用utf8,UTF8通用的编码语言,所有语言都包含了 1,国际通用的编码 unicode ,utf8 2,国内编码 gb2312 GBK 3,台湾编码 Big5 文章转载(玖乐网络 http://www.96net.com.cn/) 原文地址:https://www.cnblogs.com/96net/p/9492715.html

python学习第八天,,文件操作,切片相当于浅copy

切片的补充: 切片相当于浅copy: a = [1,2,3,4,5] b = a[:] print(id(a),id(b),id(a[0]),id(a[0])) #2432299195592 2432299195528 #1795645664 1795645664 文件的操作:(分为三步) 1.打开文件.产生文件句柄 f 2.对文件句柄进行操作 3.关闭文件句柄 f = open(r'a.txt',encoding='utf-8',mode='r') f.read() content = f.c

2018-11-23 python学习第八天

''' 计算机系统分为三层: 应用软件操作系统硬件 文本编辑器读一个文件的三个过程: 先启动文本编辑器 文件编辑器会将文件内容读入内存 将读入内存的内容显示到屏幕上 Cpython解释器执行一个py文件的三个过程: 先启动python解释器 python解释器会将py文件的内容当中普通的文本内容读入内存 开始解释执行刚刚读入内存的代码,识别python语法 字符编码字符编码指的是字符转换成/编码成数字编码的过程一定要遵循一个标准,该标准称之为字符编码表 字符--------编码-------->

python学习第八天:文件操作

文件处理 1.什么是文件处理 ①.文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位 ②.文件操作的核心就是读写 ③.我们只需要对文件进行读写操作,就是对操作系统发起请求,然后由操作系统或应用程序对文件的读写操作转换成具体的硬盘指令. 2.为什么要有文件? 因为内存无法永久保存数据,但凡我们想要永久保存数据,都需要保存到硬盘,而操作文件就可以完成对硬件的操作 3.如何使用文件 把硬盘中的数据读到内存中 f = open(r'E:\a.txt','r','utf-8')          

Python学习第八天课后

---恢复内容开始--- <html> 知识点:1,文件操作的类型 2,文件游标(指针)的使用 一,文件操作: 1,字符串 类型 1> u Unicode 编码字符串,是默认字符串 2> b Binary 二进制字符 以ascii码表对照的字符 字符与ASCII之间转化: res = ord("A") 字符转数字 res = ch(32) 数字转字符 字符与ascii码间转换 ord() 字符转换成ascii chr() ascii转换成字符 例: li = [

python学习第八天--异常

Exception 常用异常: AssertionError 断言语句失败 AttributeError 尝试访问未知的对象属性 IndexError 索引超出序列值 keyError 查找一个不存在的关键字 NameError 尝试访问不存在变量 OSError 操作系统异常 SyntaxError 语法错误 typeError 1+'1'这种 ZeroDivisionError 除数为0 原文地址:https://www.cnblogs.com/code-fun/p/11758111.htm

python学习:程序控制结构·作业20141219

Python学习:程序控制结构 20141219 编程环境: windows 7 x64 python 2.7.6 题目: 1 编写程序,完成下列题目(1分) 题目内容: 如果列出10以内自然数中3或5的倍数,则包括3,5,6,9.那么这些数字的和为23.要求计算得出任意正整数n以内中3或5的倍数的自然数之和. 输入格式: 一个正整数n. 输出格式: n以内中3或5的倍数的自然数之和. 输入样例: 10 输出样例: 23 时间限制:500ms内存限制:32000kb n = int(raw_in

python学习第二天

python学习的第二天就是个灾难啊,这天被打击了,自己写的作业被否认了,不说了,写博客还是个好习惯的,要坚持下去,就不知道能坚持到什么时候.呵呵!!! 这天教的知识和第一天的知识相差不大,区别在于比第一天讲的更细了(我们是两个老师教的,风格是不一样的),这次也写那些比较细的知识点. python的简介 (1)你的程序一定要有个主文件. (2)对于python,一切事物都是对象,对象基于类创建.#似懂非懂,不过有那么点似懂. 知识点 #__divmod__ 会把两个数字相除的商和余数以元组的方式