今天学了Python爬虫,很有意思,写一下博客记录一下学习过程。
最基本的爬虫仅需要urllib库,re库和chardet库
urllib库是Python内置的处理网络请求的库。对于基本的爬虫我们仅仅需要使用他的内部模块urllib.requset。
urllib.request中所要使用的函数
urllib.request.urlopen(url(网址)) 会返回一个
re库是正则表达式库,用来字符串模式匹配,寻找我们所需要的网页内容。
chardet库是用来获取网页编码方式的库,可以使用chardet.detect()函数获取网页使用的编码格式。
首先用先用urllib库爬取网页信息,用chardet库获取网页使用编码,再把爬取的网页信息转换成二进制文件,用解码函数把二进制文件用已知编码解码。这时就可以得到网页的完整信息了。查找原网页你所需要信息的代码。分析其模式,用正则表达式提取他们的信息,最后写入文件夹即可。
urlopen()函数的用法为
urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,*, cafile=None, capath=None, cadefault=False, context=None)
url为网页网址(字符串格式)
data为访问方式,一般默认就行
timeout为访问结束时间
其他的一般都不需修改,使用默认值即可
使用urlopen函数返回的http.client.HTTPResponse对象使用read()函数解析为二进制文件。
chardet.detect()函数返回的是一个字典
# {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
其中encoding代表编码,confidence代表精度
这时再用decode()方法解码即可得到整个页面信息。
re库中常用的是函数是match(pattern,string)、search(pattern,string)和findall(pattern,string)
match是只匹配开头,search是从开头开始匹配第一个,findall是匹配全文所有的。
下面给大家带来一个小例子
爬取豆瓣图书出版社名称和销售书的数目
from urllib.request import urlopen
import urllib.request
import chardet
import re
class Publish(object):
def __init__(self):
pass
def getInfo(self,address):
response = urlopen(address,timeout=2).read()
char = chardet.detect(response)
data = response.decode(char['encoding'])
pattern1 = '(.*?)'
pattern2 = '(.*?) 部作品在售'
result1 = re.compile(pattern1).findall(data)
result2 = re.compile(pattern2).findall(data)
return [result1,result2]
pass
def writeTxT(self,address,fileName):
result = self.getInfo(address)
f = open(fileName,'w',encoding='utf-8')
lenth = result[0].__len__()
for i in range(0,lenth):
f.write(str(i+1) +'\t' + result[0][i] + '\t' +result[1][i] + '\n')
pass
f.close()
pass
pass
if __name__ == '__main__':
publish = Publish()
fileName = 'publish.txt'
address = 'https://read.douban.com/provider/all'
publish.writeTxT(address,fileName)
pass
下一篇
python-爬虫入门(二)