python3.5爬虫基础urllib实例
python3.5不同于python2.7,在python3.5中,编写爬虫小程序,需要安装模块urllib下的request和parse类
小程序1:编写脚本,用来实现抓取百度贴吧指定页面
1 import urllib.parse #主要用来解析url 2 import urllib.request #主要用于打开和阅读url 3 import os,re 4 import urllib.error #用于错误处理 5 6 print("模拟抓取百度贴吧python和java页面,并写入指定路径文件") 7 8 def tieba_baidu(url,l): 9 #伪装成浏览器 10 header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'} 11 for i in range(len(l)): 12 file_name="G:/test/"+l[i]+".html" 13 print("正在下载"+l[i]+"页面,并保存为"+file_name) 14 m=urllib.request.urlopen(url+l[i],headers=header).read() 15 with open(file_name,"wb") as file: 16 file.write(m) 17 18 if __name__=="__main__": 19 url="http://tieba.baidu.com/f?kw=" 20 l_tieba=["python","java","c#"] 21 tieba_baidu(url,l_tieba)
小程序二:爬取指定页面指定格式的文件(本例子爬取指定页面的jpg文件)
1 print("爬取指定页面的jp格式的文件") 2 def baidu_tieba(url,l): 3 """ 4 根据传入的地址和关键字列表进行图片抓取 5 """ 6 for i in range(len(l)): 7 count=1 8 file_name="G:/test/"+l[i]+".html" 9 print("正在下载"+l[i]+"页面,并保存为"+file_name) 10 m=urllib.request.urlopen(url+l[i]).read() 11 #创建目录保存每个网页上的图片 12 dirpath="G:/test/" 13 dirname=l[i] 14 new_path=os.path.join(dirpath,dirname) 15 if not os.path.isdir(new_path): 16 os.makedirs(new_path) 17 18 page_data=m.decode() 19 page_image=re.compile('<img src=\"(.+?)\"') #匹配图片的pattern 20 for image in page_image.findall(page_data):#page_image.findall(page_data)用正则表达式匹配所有的图片 21 pattern=re.compile(r'http://.*.jpg$') #匹配jpg格式的文件 22 if pattern.match(image): #如果匹配,则获取图片信息,若不匹配,进行下一个页面的匹配 23 try: 24 image_data=urllib.request.urlopen(image).read() #获取图片信息 25 image_path=dirpath+dirname+"/"+str(count)+".jpg" #给图片命名 26 count+=1 27 print(image_path) #打印图片路径 28 with open(image_path,"wb") as image_file: 29 image_file.write(image_data) #将图片写入文件 30 except urllib.error.URLError as e: 31 print("Download failed") 32 with open(file_name,"wb") as file: #将页面写入文件 33 file.write(m) 34 35 if __name__=="__main__": 36 url="http://tieba.baidu.com/f?kw=" 37 l_tieba=["python","java","c#"] 38 baidu_tieba(url,l_tieba)
注:
1、要爬取某个页面的文件,必须用urllib.request.urlopen打开页面的连接,并用read方法读取页面的html内容
2、要爬取某些具体内容,必须分析该页面对应的html代码,找到需爬取内容所在位置的标签,利用正则表达式获取标签
3、浏览器伪装:为了防止有些网站拒绝爬虫,我们需要伪装成浏览器来实现页面的爬取,即需要添加头部文件来伪装成浏览器
header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'}
4、规范:爬取的内容尽量写入到某个文件,如果直接打印在控制台,影响阅读效果;
5、致谢:上文小例子亲测通过,但具体思路借鉴某位大神,但是地址找不到了,无法分享给大家~