python爬虫笔记02
《精通python网络爬虫》笔记
下面代码大部分来自此书,仅为本人笔记
正则表达式的使用
re模块的几个方法:(方括号为可选参数)re.search(正则字符串,源字符串,[修正符]) —— 扫描整个字符串进行匹配
- re.match(正则字符串,源字符串,[修正符]) —— 从源字符串开始位置匹配一个
- re.match(~~~).span() 只保留匹配匹配成功的位置
- **全局匹配:**pattern = re.compile(正则字符串) result = pattern.findall(源字符串) 匹配源字符串的全部符合的内容,返回一个列表
- 替换: re.sub(正则,要替换成的字符串,源字符串,[最大替换次数])
什么是Cooking
比如仅适用HTTP协议的话,登录成功一个网站时,当我们访问该网站的其他网页,登录状态会消失。所以需要将对应的会话信息保存下来:通过Cooking和Session保存,访问同一个网站其他页面时会从Cooking读取信息。。。。。
示例代码一(未使用Cooking处理)
#Cooking
import urllib.request
import urllib.parse
#真实的登录地址
url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LeSWO"
postdata = urllib.parse.urlencode({
"username":"zran***",
"password":"*****" #用户名和密码
}).encode('utf-8') #使用urlencode编码处理后,再使用encode()编码utf-8
req = urllib.request.Request(url,postdata) #构建Request对象
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0')
data = urllib.request.urlopen(req).read() #登录并爬取网页
fh = open("F:/htmls/8.html","wb")
fh.write(data)
fh.close()
#设置要爬取该网站下的其他网址,不进行Cooking处理登录状态会消失
#下面爬取的网页未登录
url2 = "http://bbs.chinaunix.net"
req2 = urllib.request.Request(url2,postdata)
req2.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0')
data2 = urllib.request.urlopen(req2).read()
fh2 = open("F:/htmls/9.html","wb")
fh2.write(data2)
fh2.close()
示例代码二(使用Cooking):
一般思路:
- 导入模块http.cookiejar
- 使用http.cookiejar.CookieJar()创建CookirJar对象
- 使用HTTPCookieProcessor创建cookie处理器,并以其未参数构建opener对象
- 创建默认的opener对象
#Cooking
import urllib.request
import urllib.parse
import http.cookiejar
#真实的登录地址
url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LeSWO"
postdata = urllib.parse.urlencode({
"username":"zran***",
"password":"******"
}).encode('utf-8') #使用urlencode编码处理后,再使用encode()编码utf-8
req = urllib.request.Request(url,postdata) #构建Request对象
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0')
#使用http.cookiejar.CookieJar创建CookirJar对象
cjar = http.cookiejar.CookieJar()
#使用HTTPCookieProcessor创建cookie处理器,并以其未参数构建opener对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#将opener安装全局
urllib.request.install_opener(opener)
file =opener.open(req)
data = file.read() #登录并爬取网页
fh = open("F:/htmls/8.html","wb")
fh.write(data)
fh.close()
#设置要爬取该网站下的其他网址,不进行Cooking处理登录状态会消失
#下面爬取的网页已登录
url2 = "http://bbs.chinaunix.net"
data2 = urllib.request.urlopen(url2).read()
fh2 = open("F:/htmls/9.html","wb")
fh2.write(data2)
fh2.close()