大家好,单页导航网站源码分享相信很多的网友都不是很明白,包括简单导航页也是一样,不过没有关系,接下来就来为大家分享关于单页导航网站源码分享和简单导航页的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
前言
正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在,而非python独有。对其知识点进行总结后,会写一个demo。
有需要Python学习资料的小伙伴吗?小编整理【一套Python资料、源码和PDF】,感兴趣者可以关注小编后私信学习资料(是关注后私信哦)反正闲着也是闲着呢,不如学点东西啦
1.正则表达式
python是自1.5开始引进re模块进行处理正则的。我先把正则的匹配规则总结一下,再总结re模块相应的方法。
1.1匹配规则
对于一个特殊字符在正则表达式中是不能正常识别的,如果接触过其他语言我们就这到有一个叫做转移字符的东西的存在,在特殊字符前加用反斜杠接口。比如\\n换行\\\\为反斜杠,在这不再累述。下面来介绍一下re这个模块。
1.2.re模块
此模块主要方法如下
re.match()函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。\nre.findall()编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)\nre.sub()返回替换次数\nre.split()pattern:正则表达式(或者正则表达式对象)string:要匹配的字符串flags:修饰符
先看一个最简单的用法
importre\ncontent=’Hello1234567wangyanlingREDome’\nprint(len(content))\nresult=re.match(‘^Hello\\s\\d\\d\\d\\s\\d{4}\\s\\w{10}.*Dome$’,content)\nprint(result)\nprint(result.group())\nprint(result.span())\n
结果:
匹配规则就不在累述,以上需要注意的是
(1).group()表示的是返回正则匹配的结果
(2).span()表示返回正则匹配的范围
使用:
以上我们已经知道re.matcha()的具体方法,那么接下我来看一下具体使用,对此我们要理解以下几种匹配的感念。
1.泛匹配(.*):匹配所有字符
importre\ncontent=’Hello1234567wangyanlingREDome’\nresult=re.match(‘^Hello.*Dome$’,content)\nprint(result)\nprint(result.group())\nprint(result.span())\n
它的结果是和上面的输出结果完全一样的。
2.目标匹配(()):将需要的字符匹配出来
importre\ncontent=’Hello1234567wangyanlingREDome’\nresult=re.match(‘^Hello\\s\\d\\d(\\d)\\s\\d{4}\\s\\w{10}.*Dome$’,content)\nprint(result)\nprint(result.group(1))\nimportre\ncontent=’Hello1234567wangyanlingREDome’\nresult=re.match(‘^Hello\\s(\\d+)\\s\\d{4}\\s\\w{10}.*Dome$’,content)\nprint(result)\nprint(result.group(1))\n
结果
以上可以看出:
(1)()匹配括号内的表达式,也表示一个组
(2)+匹配1个或多个的表达式
*匹配0个或多个的表达式
(3).group(1)—输出第一个带有()的目标
3.贪婪匹配(.*()):匹配尽可能少的的结果
importre\ncontent=’Hello1234567wangyanlingREDome’\nresult=re.match(‘^H.*(\\d+).*Dome$’,content)\nprint(result)\nprint(result.group(1))\n
结果
4.贪婪匹配(.*?()):匹配尽可能多的结果
importre\ncontent=’Hello1234567wangyanlingREDome’\nresult=re.match(‘^H.*?(\\d+).*?Dome$’,content)\nprint(result)\nprint(result.group(1))\n
结果
以上3,4两个匹配方式请尽量采用非贪婪匹配
5.其他
换行:
importre\ncontent=”’Hello1234567\nwangyanlingREDome”’\nresult=re.match(‘^H.*?(\\d+).*?Dome$’,content,re.S)pattern:正则表达式(或者正则表达式对象)string:要匹配的字符串flags:修饰符\n从开头开始查找,不能匹配返回None\nresult=re.search(‘(\\d+)\\s\\d{4}\\s\\w{10}.*Dome$’,content)\nprint(result)\nprint(result.group())\n
结果:
可以看出两个使用基本一致,search从头开始匹配,如果匹配不到就返回none.
1.2.3.re.findall()
方法:re.finditer(pattern,string,flags=0)”singer=”贾平凹”>废都</a></li>\n<liclass=”active”><ahref=”pattern:正则表达式(或者正则表达式对象);flags:修饰符
看一个demo
importre\ncontent=’Hello1234567wangyanlingREDomewangyanling那小子很帅’\nrr=re.compile(r’\\w*wang\\w*’)\nresult=rr.findall(content)\nprint(result)\n
结果:
我们可以看出compile我们可以把它理解为封装了一个公用的正则,类似于方法,然后功用。
1.2.5.其他
re.sub替换字符
方法:re.sub(pattern,repl,string,count=0,flags=0)pattern:正则表达式(或者正则表达式对象)repl:替换的字符串string:要匹配的字符串count:要替换的个数flags:修饰符
re.split()分隔字符
方法
re.split(pattern,string,[maxsplit])这里就用到了我们上述提到的一些知识点,非贪婪匹配,对象匹配,修饰符\nitems=re.findall(pattern,html)\nforiteminitems:\nyield{\n’rank’:item[0],\n’img’:item[1],\n’title’:item[2],\n’actor’:item[3].strip()[3:]iflen(item[3])>3else”,\n’time’:item[4].strip()[5:]iflen(item[4])>5else”,\n’score’:item[5]+item[6]\n}\n
对于上面的信息我们可以看出是存到一个对象中那么接下来我们应该把它们存到文件当中去。
2.2.保存文件
我写了两种方式保存到txt和csv这些在python都有涉及,不懂得可以去翻看一下。
2.2.1.保存到txt
defwrite_txtfile(content):\nwithopen(“Maoyan.txt”,’a’,encoding=’utf-8′)asf:\n将字段名传给Dictwriter来初始化一个字典写入对象\nwriter=csv.DictWriter(f,fieldnames=fieldnames)\n抓取猫眼电影TOP100榜\nfrommultiprocessingimportPool\nfromrequests.exceptionsimportRequestException\nimportrequests\nimportjson\nimporttime\nimportcsv\nimportre\ndefget_one_page(url):\n”’获取单页源码”’\ntry:\nheaders={\n”User-Agent”:”Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/68.0.3440.106Safari/537.36″\n}\nres=requests.get(url,headers=headers)\n采用遍历的方式提取信息\nforiteminitems:\nyield{\n’rank’:item[0],\n’img’:item[1],\n’title’:item[2],\n’actor’:item[3].strip()[3:]iflen(item[3])>3else”,要引入json,利用json.dumps()方法将字典序列化,存入中文要把ensure_ascii编码方式关掉\nf.write(json.dumps(content,ensure_ascii=False)+”\\n”)\nf.close()\ndefwrite_csvRows(content,fieldnames):\n”’写入csv文件内容”’\nwithopen(“Maoyao.csv”,’a’,encoding=’gb18030′,newline=”)asf:\n调用writeheader方法写入字段名\n这里写入字段的话会造成在抓取多个时重复.\nwriter.writerows(content)\nf.close()\ndefdownload_img(title,url):\nr=requests.get(url)\nwithopen(title+”.jpg”,’wb’)asf:\nf.write(r.content)\ndefmain(offset):\nfieldnames=[“rank”,”img”,”title”,”actor”,”time”,”score”]\nurl=”http://maoyan.com/board/4?offset={0}”.format(offset)\nhtml=get_one_page(url)\nrows=[]\nforiteminparse_one_page(html):\nmap方法会把每个元素当做函数的参数,创建一个个进程,在进程池中运行.\npool.map(main,[i*10foriinrange(10)])\n
有需要Python学习资料的小伙伴吗?小编整理【一套Python资料、源码和PDF】,感兴趣者可以关注小编后私信学习资料(是关注后私信哦)反正闲着也是闲着呢,不如学点东西啦
好了,关于单页导航网站源码分享和简单导航页的问题到这里结束啦,希望可以解决您的问题哈!
