python3的网页爬虫(urllib模块在python3.6,及正则表达式)

 

import re
import urllib.request as u

def getHtml(url):
    page=u.urlopen(url)
    html=page.read()
    return html
def getImg(html):
    reg=r"src=.*\.jpgwidth"
    imgre=re.compile(reg)
    imglist=re.findall(imgre,html)
html=getHtml("https://tieba.baidu.com/p/5814626777")
w=getImg(html)
print(w)

结果:目前可以下载网页源代码,提取jpg文件地址,下载jpg文件。

调试经历:

1.urllib模块在python3.6的软件上就没有,导入超找不到据说内置了,后来找到urllib.request.py 文件。可以正确导入了。

2.导入后使用urlopen应该打印整个页面源代码,也打印不成功。(出现如下字符,惆怅了1天 没弄明白放那里了,写此文时突然发现新东西了!!)

 

 

3.点击进去出现网页源代码了~~呵呵~~开心

4.又发现出现如下报错 调用的re 函数错误吧。~再试试 加油!

5.针对问题2 找相关资料发现

针对这个问题找网上资料结果发现将return html改为return html.decode('UTF-8')如下代码 可打印网页原代码。(猜测网页中有中文字符吧)

6.针对正则不成功 把语句imglist=re.findall(imgre,html)改为imglist=imgre.findall(html)

7.地址路径/ 改为、

8.根据下载部分变成函数print_ps 可以成功下载了

源代码目前如下:

import re
import os
import urllib.request as u

def getHtml(url):
    page=u.urlopen(url)
    html=page.read()
    return html.decode('UTF-8')
def getImg(html):
    reg=r'src="(.+?\.jpg)" size='
    imgre=re.compile(reg) # 转化为一个正则对象
    imglist=imgre.findall(html)#将需要的网址放在imglist中
   # print(imglist)
    return imglist

def print_ps(imglist):
    x=0
    path='C:/PycharmProjects/untitled1/and  child learn phthon/ago/picture'
    if not os.path.isdir(path):
        os.makedirs(path)
    paths=path+'\\'
    for im in imglist:
        u.urlretrieve(im,'{0}{1}.jpg'.format(paths,x))
        x+=1
        print("图片已经开始下载注意查看文件夹")
Html=getHtml("https://tieba.baidu.com/p/5814626777")
imglist=getImg(Html)
print_ps(imglist)

 

 

你可能感兴趣的:(python)