• 吴裕雄--python学习笔记:爬虫


    import chardet
    import urllib.request
    
    page = urllib.request.urlopen('http://photo.sina.com.cn/') #打开网页
    htmlCode = page.read() #获取网页源代码
    
    print(chardet.detect(htmlCode)) #打印返回网页的编码方式
    {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
    data = htmlCode.decode('utf-8')
    print(data) #打印网页源代码
    pageFile = open('E:\pageCode.txt','wb')#以写的方式打开pageCode.txt
    pageFile.write(htmlCode)#写入
    pageFile.close()#开了记得关
    获取其他信息
    
    打开pageCode.txt文件(也可以直接在原网页F12调试获取),查看需要获取数据的标签信息。
    
    比如我现在要拿图片
    
    写出图片的正则表达式: reg = r'src="(.+?.jpg)"' 
    
    解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" 结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。
    
    接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串。
    
    用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表
    import re
    import chardet
    import urllib.request
     
    page = urllib.request.urlopen('http://www.meituba.com/tag/juesemeinv.html') #打开网页
    htmlCode = page.read() #获取网页源代码
     
    #print(chardet.detect(htmlCode)) #查看编码方式
    data = htmlCode.decode('utf-8')
    #print(data) #打印网页源代码
     
    #pageFile = open('pageCode.txt','wb')#以写的方式打开pageCode.txt
    #pageFile.write(htmlCode)#写入
    #pageFile.close()#开了记得关
     
    reg = r'src="(.+?.jpg)"'#正则表达式
    reg_img = re.compile(reg)#编译一下,运行更快
    imglist = reg_img.findall(data)#进行匹配
    for img in imglist:
        print(img)
    http://ppic.meituba.com:83/uploads3/181201/3-1Q20111553V11.jpg
    http://ppic.meituba.com:83/uploads2/180622/3-1P62215532D61.jpg
    http://ppic.meituba.com:83/uploads2/180605/3-1P6051000144I.jpg
    http://ppic.meituba.com:83/uploads2/170511/8-1F5110URc35.jpg
    http://ppic.meituba.com:83/uploads/160322/8-1603220U50O23.jpg
    http://ppic.meituba.com:83/uploads2/180317/3-1P31F91U1X9.jpg
    http://ppic.meituba.com:83/uploads/160718/7-160GQ51G0b4.jpg
    http://ppic.meituba.com:83/uploads2/170517/8-1F51G50301Q3.jpg
    http://ppic.meituba.com:83/uploads/161010/7-1610101A202B0.jpg
    http://ppic.meituba.com:83/uploads2/171102/7-1G102093511F7.jpg
    http://ppic.meituba.com:83/uploads2/170901/7-1FZ1100545438.jpg
    http://ppic.meituba.com:83/uploads/160625/8-160625093044631.jpg
    http://ppic.meituba.com:83/uploads/160419/7-160419161553153.jpg
    http://ppic.meituba.com:83/uploads2/170323/7-1F323103404A2.jpg
    http://ppic.meituba.com:83/uploads2/170322/7-1F322105R1255.jpg
    http://ppic.meituba.com:83/uploads2/170211/7-1F21110040Y63.jpg
    http://ppic.meituba.com:83/uploads2/170110/7-1F110102005930.jpg
    http://ppic.meituba.com:83/uploads/160618/8-16061Q04450391.jpg
    http://ppic.meituba.com:83/uploads2/170330/3-1F3301HI6138.jpg
    http://ppic.meituba.com:83/uploads2/161230/4-161230100U5V8.jpg
    然后将图片下载到本地
    
    urllib库中有一个 urllib.request.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下
    x = 0
    for img in imglist:
        print(img)
        urllib.request.urlretrieve('http://ppic.meituba.com/uploads/160322/8-1603220U50O23.jpg', '%s.jpg'  % x)
        x += 1
    import re
    import urllib.request
     
    def getGtmlCode():
        html = urllib.request.urlopen("http://www.quanshuwang.com/book/44/44683").read() #获取网页源代码
        html = html.decode("gbk") #转成该网站格式
        reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>' #根据网站样式匹配的正则:(.*?)可以匹配所有东西,加括号为我们需要的
        reg = re.compile(reg)
        urls = re.findall(reg, html)
        for url in urls:
            #print(url)
            chapter_url = url[0] #章节路径
            chapter_title = url[1] #章节名
            chapter_html = urllib.request.urlopen(chapter_url).read() #获取该章节的全文代码
            chapter_html = chapter_html.decode("gbk")
            chapter_reg = r'</script>&nbsp;&nbsp;&nbsp;&nbsp;.*?<br />(.*?)<script type="text/javascript">' #匹配文章内容
            chapter_reg = re.compile(chapter_reg,re.S)
            chapter_content = re.findall(chapter_reg, chapter_html)
            for content in chapter_content:
                content = content.replace("&nbsp;&nbsp;&nbsp;&nbsp;","") #使用空格代替
                content = content.replace("<br />","") #使用空格代替
                print(content)
                f = open('E:\aa\{}.txt'.format(chapter_title),'w') #保存到本地
                f.write(content)
                
    getGtmlCode()
  • 相关阅读:
    【Eclipse导入外部包解决方案】由GoogleMap导入gms包问题引出
    新生活即将开始

    继续我的C旅程
    圣诞后
    新年
    来来回回;不知所云
    吵啊吵啊吵啊
    去海边
    休假结束
  • 原文地址:https://www.cnblogs.com/tszr/p/11954977.html
Copyright © 2020-2023  润新知