Python 爬虫

最近学了爬虫技术,给小白参考参考,这门语言怎么说,我是主C++的,学了这门语言,感觉很通,如果有错的地方,大神多指教

第一篇:简单的爬虫

后面会持续的写出爬虫以及反爬虫的,首先我们来学习一下正则表达式,em~,个人感觉直接看代码学习就完事了,敲一遍或者复制(建议敲)试效果就好:

import re

#普通字符作为原子
string = "taoyunjiaoyu"
pat="yum"
rst=re.search(pat,string)
print(rst)

#非打印字符作为原子
#\n 换行符 \t 制表符
import re
string="taoyunjioayubaidu"
pat="\n"
rst=re.search(pat,string)
print(rst)

#通用符作为原子
'''
\w  字母、数字、下划线
\W  除字母、数字、下划线
\d  十进制数字
\D  除十进制数字
\s  空白字符
\S  除空白字符
'''
import re
pat="\S\d\d"
string = "taoyunji87362387aoyubaidu"
rst=re.search(pat,string)
print(rst)

#元字符
'''
. 除换行外任意一个字符
^ 开始位置
$ 结束位置
* 0\1\多次
? 0\1次
+ 1\多次
{n} 恰好n次
{n,} 至少n次
{n,m} 至少n,至多m次
| 模式选择符或
() 模式单元
'''

import re
string = '''taoyunji87362387aoyubaidu'''
pat="^tao...$"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunji87362387aoyubaidu"
pat="bai..$"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunji87362387aoyubaidu"
pat="ao...*$"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunji87362387aoyubaidu"
pat="tao+"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunji873862387aoyubaidu"
pat="tao..?"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunnnnnji87362387aoyubaidu"
pat="taoyun+"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunji87362387aoyubaidu"
pat="38{1}"
rst=re.search(pat,string)
print(rst)

import re
string = "taoyunji87362387aoyubaidu"
pat="38{1,}"
rst=re.search(pat,string)
print(rst)

#模式修正符
'''
I 匹配时忽略大小写*
M 多行匹配*
L 本地化识别匹配
U unicode
S 让.匹配包括换行符
'''
string = "Python"
pat = "pyt"
rst = re.search(pat,string,re.I)
print(rst)

#贪婪模式与懒惰模式
string = "Poypython"
pat="p.*y"#贪婪模式
pat2="p.*?y"#懒惰模式,精准
rst=re.search(pat,string,re.I)
rst2=re.search(pat2,string,re.I)
print(rst)
print(rst2)

#正则表达式函数
#1、match
string = "poythonyhiskjsa"
pat = "p.*?y"#懒惰模式,精准
rst = re.match(pat,string,re.I)
print(rst)
#2、serach已讲
#3、全局匹配函数
string = "hgpoythpryhjsptjhgjykisa"
pat="p.*?y"#懒惰模式,精准
#全局匹配格式re.compile(正则表达式).findall(数据)
rst=re.compile(pat).findall(string)
print(rst)
#4、替换函数
string = "python 12 23 python "
pat="python"
rst=re.sub("\d+",pat,string,2,re.I)
print(rst)

#实例:匹配.com和.cn网址
string="<a href ='htpps://www.baidu.com'>百度首页</a>"
pat = "[a-zA-Z]+://[^\s]*[.com|.cn]"
rst=re.compile(pat).findall(string)
print(rst)

#实例:匹配电话号码
string = "hgpoy0251-8213456thpryhjsptjh025-85612365gjykisa"
pat = "\d{4}-\d{7}|\d{3}-\d{8}"
rst=re.compile(pat).findall(string)
print(rst)

开始爬虫

这里爬虫用的是urllib,当然还有其他的,这里就不讲了,该模块使用方法大致为这个

#简单爬虫的编写
import urllib.request
data=urllib.request.urlopen("https://www.****.net/").read()#将信息读入data,不建议输出data,不信就试试

假设我们现在要爬取网易云课堂首页
看图片
Python 爬虫从图上可以看到+数字只有一个,那么,下面,我们就开始爬虫

import urllib.request
import re #正则表达式
string=urllib.request.urlopen("https://study.163.com").read().decode("utf-8") #utf-8转码
pat="<span>(\d*?-\d*?)</span> "
rst=re.compile(pat).findall(string)

爬取完后我们可以看到已将爬出来了
Python 爬虫
接下来是urllib的基本操作,上面有的两个我就不说了,关于正则表达式得自己多练,找经验

import urllib.request
#urlretrieve(网址,本地文件存储地址) 直接下载网页到本地
urllib.request.urlretrieve("https://study.163.com","D:\\python\\zhuye12.html") #将网页下载到本地
urllib.request.urlcleanup()#清理缓存
#info()看相应的简介信息
import urllib.request
file=urllib.request.urlopen("https://study.163.com")
print(file.info())
#getcode()查看访问网页的状态 200:正常状态码
num=file.getcode()
#获取当前访问的网页的url,geturl()
rute = file.geturl()