Python简单的爬虫(一)

来源:互联网 发布:au是什么软件 编辑:程序博客网 时间:2024/06/10 22:56

本周上班没事就开始学了python,看了本入门,然后学习写了下简单的爬虫,记录下:
很菜,求大神提供下资源。。。如果大神碰巧看到

自己的理解:
爬虫就是下页面然后从里面取自己需要的信息,所以取信息的方法很重要,会影响到数据的准确性和爬取数据的时间。

用的Python3的版本

爬取整个页面的信息:

发一个请求浏览网页,给我们返回的是个html,python提供了获取这个页面所有字符串的方法,所以很简单:

import  urllib.requestdef save_data(data):     #保存成文件    save_path = 'D:/test/pythonTestDownload/lol.txt'    f = open(save_path,'wb')    f.write(data)    f.close()url = 'http://lol.qq.com/'webPage = urllib.request.urlopen(url)   data = webPage.read()s = data.decode('GBK')   #lol官网是GBK的 其他页面可能是UTF-8print(s)save_data(data)

运行后可以看到控制台输出lol官网的html字符串(和右键网页查看源代码一样,但是js文件并没有。。。)
‘D:/test/pythonTestDownload/lol.txt’ 文件也生成,内容一样

有的网页对于上个方法爬取报403,表示阻止这样的请求,就需要我们自己添加请求头:

import urllib.requestdef save_data(data):    save_path = 'D:/test/pythonTestDownload/lol.txt'    f = open(save_path,'wb')    f.write(data)    f.close()webUrl = 'http://lol.qq.com/'webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}req = urllib.request.Request(url = webUrl,headers = webheader)webPage = urllib.request.urlopen(req)data = webPage.read()s = data.decode('GBK')print(s)# print(type(webPage))# print(webPage.geturl())# print(webPage.info())# print(webPage.getcode())save_data(data)

头部获取:可以f12找到对应请求然后CV大发:
这里写图片描述
大块红色的就是请求头,我加了最下面的一行,可以都加一下试试。

爬取图片

就是把上面取得的字符串里面图片的请求抠出来,然后一一下载:

import urllib.requestimport socketimport reimport sysimport osfrom urllib import responsefrom urllib.parse import urljointargetDir = 'D:/test/pythonTestDownload'def destFile(path):    #下载文件位置生成    if not os.path.isdir(targetDir):        os.mkdir(targetDir)    pos = path.rindex('/')    t = os.path.join(targetDir,path[pos+1:])    return tdef save_data(data):  #保存全部html的字符串    save_path = 'D:/test/pythonTestDownload/test.txt'    f = open(save_path,'wb')    f.write(data)    f.close()if __name__=='__main__' :    weburl = 'http://lol.qq.com/'    webheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}    req = urllib.request.Request(url = weburl,headers = webheaders)    webpage = urllib.request.urlopen(req)    contentBytes = webpage.read()    save_data(contentBytes)    # print(contentBytes)    # print(contentBytes.decode('GBK'))    print(set(re.findall(r'(src=[^\s]*?(jpg|png|gif))',str(contentBytes))))GBK #正则抠出图片的请求    socket.setdefaulttimeout(5)  #设置socket超时时间(防止一些下载卡住很长时间)    for link,tail in set(re.findall(r'(src=[^\s]*?(jpg|png|gif))',str(contentBytes))):        # print(link)        link=link[5:]        print(link)        # print("----")        # urljoin(response.url, link)        # print(urljoin('http://lol.qq.com/', link))        try:            urllib.request.urlretrieve(urljoin('http://lol.qq.com/', link),destFile(link))  #下载        except:            print("失败:")

D:/test/pythonTestDownload路径下就可以看到下载的图片了。这儿的图片是查看网页源代码中存在的图片url,像在js里面的图片url就下载不到,这个以后再研究。。。网上大佬说需要配合js引擎,又可以学习的新东西哦。。。