python3爬虫基础学习

来源:互联网 发布:手机天猫 手机淘宝 编辑:程序博客网 时间:2024/05/01 00:57

在知乎上看到别人写的python爬虫,链接:同时用R语言和Python爬取知乎美图,学习一下,源代码执行不成功,稍微修改了一下,很简单,代码如下:

import requestsfrom bs4 import BeautifulSoupimport osimport reimport urlliburl="https://www.zhihu.com/question/35931586/answer/206258333"header={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'}page=requests.get(url,headers=header)soup=BeautifulSoup(page.text,'lxml')link_list=soup.find_all("img",class_="origin_image zh-lightbox-thumb lazy")os.makedirs("./Image/zhihu/")os.chdir('./Image/zhihu/')for link in link_list:    mylink=link.get('data-original')    name=re.findall(r"v2-.*?\.jpg",mylink)[0]    urllib.request.urlretrieve(mylink,name)

学习笔记:urlretrieve(url,filename=null,reportbook=null,data=null)方法,将远程数据下载到本地,参数说明:
url:外部或者本地url
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。
改成如下代码能看到每张图片的存储进度:

import requestsfrom bs4 import BeautifulSoupimport osimport reimport urllibdef callbackfunc(blocknum,blocksize,totalsize):    '''    @blocknum: 已经下载的数据块    @blocksize: 数据块的大小    @totalsize: 远程文件的数据块    '''    percent=100.0*blocknum*blocksize/totalsize    if percent>100:        percent=100    print("%.2f%%" %percent)url="https://www.zhihu.com/question/35931586/answer/206258333"header={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'}page=requests.get(url,headers=header)soup=BeautifulSoup(page.text,'lxml')link_list=soup.find_all("img",class_="origin_image zh-lightbox-thumb lazy")os.makedirs("./Image/zhihu/")os.chdir('./Image/zhihu/')for link in link_list:    mylink=link.get('data-original')    name=re.findall(r"v2-.*?\.jpg",mylink)[0]    urllib.request.urlretrieve(mylink,name,callbackfunc)

另外推荐学习资料:
Beautiful Soup 4.2.0 文档
用Python3开发爬虫

原创粉丝点击