第二部分 Python爬虫技术
1. 网络爬虫的初识
采集金融数据、商品数据、自动过滤广告、采集行业数据
2.运行原理
通用爬虫:获取初始的URL->爬页面并获取新的URL->新的URL放入URL队列->读取新URL->是否满足停止条件?->YES,停止;NO,换到第二步
聚焦网络爬虫:增加过滤
3.正则表达式(indispensable)
希望提取关注的数据,通过表达式进行提取。正则表达式是进行数据筛选的表达式。
原子:正则表达式中最基本的组成单位,每个正则表达式中至少包含一个原子。
可以匹配任意字符,^匹配字符串开始的位置,$匹配字符串结束的位置,
\s匹配任意字符,*匹配任意次数,?匹配0次或者1次
#+重复1次或者多次
#{3}前面的原子恰好出现了3次
#t{n,}t至少出现了n次
[^/s]非空白字符
贪婪模式与懒惰模式:前者尽可能多的去匹配,后者尽可能少的去匹配
正则表达式函数:
re.match()从头开始match,头不对直接返回none,只出现一个结果
re.search()从头往后match,只出现一个结果
re.compile(pat).findall(string),全局搜索函数,返回所有满足条件的结果
#简单爬虫
import urllib.request
data=urllib.request.urlopen(“https://blog.csdn.net/JIESA/article/details/81064966”).read()
pat=’(.*?)’
re.compile(pat).findall(str(data))
#作业:爬取豆瓣出版社信息
#爬取数据
import urllib.request
data=urllib.request.urlopen(“https://read.douban.com/provider/all”).read()
data=data.decode(“utf-8”)
#获得数据后进行筛选
import re
pat=’(.*?)’
mydata=re.compile(pat).findall(data)
#写入文件
fh=open(“C:/Users/ASUS/Desktop/py/py练习/出版社.txt”,“w”)
for i in range(0,len(mydata)):
fh.write(mydata[i]+"\n")fh.close()
4.Urllib实战
urlretrieve()将某一个网页直接爬到本地
urlcleanup()将urlretrieve()产生的缓存清除
info()返回一些信息
getcode()获取当前网页的状态:403禁止访问,200正常获取
geturl()获取当前网页的地址
超时设置
如果网页长时间未响应,为超时,加timeout属性,有的服务器比减慢
file=urllib.request.urlopen(“http://www.baidu.com”,timeout=1)
自动模拟HTTP请求
客户端与服务端进行通信,需要通过http请求。请求方式多种,在此讲到post和get两种方式。
#url封装成一个request,获取数据
import urllib.request
keywd=“Python”
url=“http://www.baidu.com/s?wd=”+keywd
req=urllib.request.Request(url)
data=urllib.request.urlopen(req).read()
#打开文件写入
fh=open(“C:/Users/ASUS/Desktop/py/py练习/baidu2.html”,“wb”)
fh.write(data)
fh.close()
如果是中文,加一句话解决编码问题
keywd=“尊尊”
urllib.request.quote(keywd)
例子
import urllib.request
import urllib.parse
#封装请求,把请求发出,将提交之后的网页爬下来url=“http://www.iqianyue.com/mypost/”
mydata=urllib.parse.urlencode({“name”:“8@qq.com”,“pass”:“1234”}).encode(“utf-8”)
req=urllib.request.Request(url,mydata)
data=urllib.request.urlopen(req).read()
#以写入的方式打开,写入本地的文件fh=open(“C:/Users/ASUS/Desktop/py/py练习/iqianyue.html”,“wb”)
fh.write(data)
fh.close()