python-爬虫入门(一)

今天学了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-爬虫入门(二)

你可能感兴趣的:(python)