zoukankan      html  css  js  c++  java
  • 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、致谢:上文小例子亲测通过,但具体思路借鉴某位大神,但是地址找不到了,无法分享给大家~

     
  • 相关阅读:
    css---box-sizing
    float与inline-block的一些应用场景的区别
    一些html元素的最原始状态
    css之深入理解overflow
    css中的锚点
    新增UI样式
    zh-CN、zh-Hans区别
    SourceTree 3.3.6安装跳过注册安装
    Windows sever 由于管理员设置的策略,该磁盘处于脱机状态的解决方法。
    CentOS7.x安装VNC实录
  • 原文地址:https://www.cnblogs.com/eric8899/p/6118486.html
Copyright © 2011-2022 走看看