2019 7.1学习笔记

正则表达式补充:

^(脱字号):表示以...开始  (在match中使不使用都是一样的;如果在中括号中,那么代表是取反操作)       

 $:表示以...结束      必须要以XX结尾   

 |:匹配多个表达式或者字符

贪婪模式和非贪婪模式

贪婪模式:正则表达式会匹配尽量多的字符(默认为贪婪模式)

非贪婪模式:正则表达式会尽量少的匹配字符    ?

#text="<h1>标题</h1>"
#ret=re.match('<.+?>',text)
#print(ret.group())

#输出结果 :  <h1>
# 匹配0-100的数字
# text="1001"
# ret=re.match('[1-9][0-9]?$|100$',text)
# print(ret.group())

 re模块中常用的函数

 group分组

# text="apple's price is $99,orange's price is $10"
# ret=re.search('.*(\$\d+).*(\$\d+)',text)
# print(ret.group())       #等价于print(ret.group(0))
# print(ret.group(1))
# print(ret.group(2))
# print(ret.groups())      #等价于print(ret.group(1,2))

findall

找到所有满足条件的,返回一个列表

sub

将匹配到的字符串换成其它字符串

re.sub(pattern, repl, string, count=0, flags=0)

split

按照能够匹配的子串将字符串分割后返回列表

compile

将正则表达式编译放在内存中 提高执行效率

# text="the number is 20.50"
# r=re.compile(r"""
#     \d+    #小数点前的数字
#     .?     #小数点本身(可以不存在)
#     \d*    #小数点后面的数字(可以不存在)
# """,re.VERBOSE)
# ret=re.search(r,text)
# print(ret.group())

爬取古诗文网

import re
import requests

def parse_page(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    }
    response = requests.get(url, headers)
    text = response.text
    titles = re.findall(r'<div class="cont">.*?<b>(.*?)</b>', text, re.DOTALL)
    print(titles)
    dynasties = re.findall(r'<p class="source">.*?<a.*?>(.*?)</a>', text, re.DOTALL)
    authors = re.findall(r'<p class="source">.*?<a.*?<a.*?>(.*?)</a>', text, re.DOTALL)
    content_tags=re.findall(r'<div class="contson".*?>(.*?)</div>', text, re.DOTALL)
    contents=[]
    for content in content_tags:
        x=re.sub(r'<.*?>',"",content)
        contents.append(x.strip())
    poems=[]
    for value in zip(titles,dynasties,authors,contents):
        title,dynastie,author,content=value
        poem={
            'title':title,
            'dynastie':dynastie,
            'author':author,
            'content':content
        }
        poems.append(poem)
    for poem in poems:
        print(poem)
        print('='*40)

def main():
    for i in range(1,11):
        url= 'https://www.gushiwen.org/default_%s.aspx' %i
        parse_page(url)

if __name__ == '__main__':
    main()

 json

dump和dumps

person=[
    { 'username':'张三','age':18}, { 'username':'李四','age':21}, { 'username':'王五','age':15}
]
# json_str=json.dumps(person,ensure_ascii=False)    #因为json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
with open('person.json','w',encoding='utf-8')as fp:
    # fp.write(json_str)
    json_str = json.dump(person,fp,ensure_ascii=False)

load和loads  同上正好相反 

 

 

 

 

posted on 2019-07-01 01:32  Joker乔柯  阅读(215)  评论(0编辑  收藏  举报

导航