Python开发模块:Urllib

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python开发模块:Urllib相关的知识,希望对你有一定的参考价值。

Urllib实战

1、爬取糗事百科中段子和用户名:

代码实例:

# 爬取网站页面内容
import re
import  urllib.request

url = ‘https://www.qiushibaike.com/8hr/page/%s/?s=4991994‘
headers =(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36‘)

def getcontent(url,page):
    # 模拟浏览器
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    urllib.request.install_opener(opener)
    # 获取html信息
    html = urllib.request.urlopen(url%page).read().decode(‘utf-8‘)
    pat_author = ‘<div class="author clearfix">.*?<h2>(.*?)</h2>‘
    pat_content = ‘<div class="content">.*?<span>(.*?)</span>‘
    authors = re.compile(pat_author,re.DOTALL).findall(html)     # re.DOTALL .可以匹配任意字符\\n
    contents = re.compile(pat_content,re.DOTALL).findall(html)

    for num in range(len(authors)):
        print(‘用户%s是:‘%(num+1),authors[num])
        print(‘内容是:\\n‘,contents[num])

if __name__ == ‘__main__‘:
    for i in range(4,5):
        getcontent(url,str(i))

打印信息:

技术分享
用户1是: AM八八神
内容是:
 突然好怀念零几年的时候QQ刚开始普及,大家搜索陌生人添加聊天,在各种QQ群里神侃大山,无止尽的样子。那时候的新奇与探索。
用户2是: 火炎焱4
内容是:
 昨天到哥们家吃饭,喝了点酒,没敢开车,只好坐末班公交车(夜11点半)上车后除了司机就我一人!车走了几站,上来一位女孩坐在我前面,突然这女孩头一仰自己把头发拽下来了!把我吓的各种鬼怪涌上脑里!仔细一看是假发套,妈的吓死了
用户3是: 金钱好酒婊子与狗
内容是:
 昨晚跟几个朋友在外面聊天,有几个老外走过来跟我们打招呼,出于礼貌本帅用了一手中英混合语言跟他们强行交流了半天。。。      或许说是男人的那种默契是不分国界吧。。。<br/>最后把方向锁定在对面的足浴城!!
用户4是: 江左-梅郎
内容是:
 至少五个字
用户5是: 大宝天天见变成天天大保健
内容是:
 这个留言也是太厉害了,新技能啊!
用户6是: 傻洛
内容是:
 一天我闺蜜在把着她小儿子嘘嘘,突然来了一句“你看我儿子这家伙那么小,真愁人”我想都没想就说了一句“估计是遗传他爸吧”最近闺密看我眼神都不一样了
用户7是: deviruchi
内容是:
 我有个同事叫刘士坚,我们都管他叫时间,有一次公司想做个产品广告,就开了个会讨论,我这个同事出去见客户会开到一半才回来,我们对广告的时长有分歧,这时候同事刚好推门进来,正好老总说到:“我不管,反正你们要把时间给我掐死!”然后我这位同事一脸震惊的默默退出门外吧门关上了,我们集体愣了几秒然后狂笑的岔不过气来……
用户8是: 莫纳的世界
内容是:
 陪熊孩纸去淘气堡玩,看秋千那四处没人,想上去体验一把,但又怕秋千承受不了我的体重……坐上去我才知道我想多了……卡秋千座上了,更别说荡了!
用户9是: 匿名用户
内容是:
 晚上和儿子在床上闹腾,老婆进来说,娃太兴奋了不好睡觉,别玩“武”的了,来点“文”的吧。<br/>娃恰好放了个响屁,说:给你闻吧!
用户10是: 江江和乐乐
内容是:
 你能想象我在一个四面透风的厕所里尿尿,尿得正爽的时候,突然从前面破洞里伸进来一个光秃秃的脑袋,吓得劳资浑身一激灵。一个剎不住车,尿了他一头的情景吗……后来才知道,他刚刚在这蹲坑,想回来看看钥匙是不是掉这了。。。。。
用户11是: 绦子
内容是:
 时光的故事……
用户12是: 蜗牛也是牛妞
内容是:
 想问问首付多少……
用户13是: 上帝之手001
内容是:
 听别人说的,大学英语考试(英语考试大部分是选择),临交卷5分钟同学传过来答案马上开始抄,抄到最后发现答案少两个,当场就崩溃了
用户14是: 文宇荃
内容是:
 生了小女儿都一年多了平躺还摸不到肋骨。
用户15是: 懂,又怎样?
内容是:
 刚刚来大号去上厕所,进去后发现爆满,里面太臭,我走出来,在门外踩着碎步等……就在这时马路上走来一个皮肤白皙,五官清秀,俊郎,的短发少年,准备上厕所,我好心提醒:“嘿!兄弟,我劝你还是等一下吧!里面我都看了,全爆满!”<br/>他一听顿时就怒了大骂到:“你个臭不要脸的流氓!谁跟你是兄弟呀!”说完,狠狠的踩了我一脚,转身进了女厕……
用户16是: 阿·木
内容是:
 最近天气持续闷热,夜里突然下起了大暴雨。电闪雷鸣!媳妇儿像一只小小鸟紧紧的依偎在我的怀里,瑟瑟发抖。我才明白,原来平日里让我跪搓衣板,凶巴巴的‘母老虎’媳妇儿怕的是老天爷!!!
用户17是: 道士下山会女神
内容是:
 感冒发烧需住院治疗,医院内外一冷一热,老婆也渐有热伤风的迹象,就报怨说:就你这小身板,动不动就感冒,婚前咋没听你说起过呢?<br/>楼主一听不悦的回道:小时候你从你家门口三米多高的坎上摔下去,把头摔得有点糊涂了,婚前你不是也没说起过?
用户18是: 冉冉阿冉啊
内容是:
 一入糗百纯洁已不再。刚才无聊在糗友圈看,看到有一个人提问:女人能接受多大的?我正要评论十岁以内吧,年龄不重要。然后刷评论的时候看到18cm,我就赶紧把我的评论删了,怕在那种场合显得我格格不入……捂脸
用户19是: 这个名字你用不了
内容是:
 当年期末考试让舍友罩着我,别说他还挺义气!<br/>12个选择题整齐的一排11个答案,有一题不会,也没说是哪一题不会!<br/>那一年,我的数学有史以来最牛逼的,5分:我蒙对了最难的选择题,还有一个学霸是自己做出来的!
用户20是: 恶意一个车
内容是:
 刚才我在扫地,宝宝过来的,一个手拿着垃圾袋,一个手吃着鸡蛋,我让他把袋扔了,他看了看我把蛋扔了。。。。小孩子的世界你不懂。
输出信息

 

2、爬取照片存放到本地

代码实例:

# 爬取图片、下载到本地
import re
import os
import urllib.request

url = ‘http://www.nipic.com/photo/other/index.html?page=‘  # 访问的地址
receive = ‘D:\\\\spider‘                                            # 存储路径

def craw(url,page):
    html = urllib.request.urlopen(url+page).read().decode(‘utf-8‘)

    # 第一步过滤
    par_div =‘<div class="search-result overflow-hidden">.*<div class="common-page-box mt10 align-center">‘
    result_div = re.compile(par_div,re.DOTALL).findall(html)
    html = result_div[0]

    # 第二部过滤
    par_img = ‘<img src="(http://.*?\\.jpg)" alt="(.*?)" />‘
    result_img = re.compile(par_img).findall(html)
    if not result_img:
        return False  # 最后一页为空跳出

    for img in result_img:
        img_url = img[0]
        img_name =  receive + ‘\\\\P‘ + str(page)+ ‘-‘ + img[1] +‘.jpg‘  # 路径+图片名
        file_name =  same_name(img_name)
        try:
            urllib.request.urlretrieve(img_url, file_name)
        except urllib.error.URLError as e:
            if hasattr(e,‘code‘):
                print(e.code)
            if hasattr(e,‘reason‘):
                print(e.reason)
    return True

def same_name(imgname,times=0):  # 同名文件加数字区分
    if os.path.exists(imgname):
        times +=1
        file,extension = imgname.split(‘.‘)
        file = file.strip(‘(%s)‘%(times-1))
        imgname = ‘%s(%s).%s‘%(file,times,extension)
        return same_name(imgname,times)
    else:
        return imgname


if __name__ == ‘__main__‘:
    # 爬取1到9页的内容
    for page in range(1,10):
        ret = craw(url,str(page))
        if not ret:
            break

    print(‘End page[%s]‘%page)

爬取结果:

 技术分享

 

3、爬取页面中所有的链接

代码实例:

# 爬取链接
import re
import  urllib.request

url = ‘http://blog.csdn.net/‘
headers =(‘User-Agent‘,‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36‘)

def get_link():
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]
    urllib.request.install_opener(opener)
    html = urllib.request.urlopen(url).read().decode(‘utf-8‘)

    pat_url = ‘(http?://[^\\s";]+\\.(\\w|/)+)‘

    result = re.compile(pat_url).findall(html)
    result = list(set(result))
    for link in result:
        print(link[0])

if __name__ == ‘__main__‘:
    get_link()

打印输出:

技术分享
http://avatar.csdn.net/4/1/6/3_qq446282412.jpg
http://blog.csdn.net/u010989951/article/details/75096153
http://img.knowledge.csdn.net/upload/base/1465887837340_340.jpg
http://static.blog.csdn.net/static/images/expert_apply.png
http://blog.csdn.net/wzy0623
http://blog.csdn.net/column/details/16013.html
http://static.blog.csdn.net/static/css/font-awesome.min.css
http://edu.csdn.net/huiyiCourse/series_detail/45
http://avatar.csdn.net/2/D/B/3_itmyhome.jpg
http://lib.csdn.net/base/java
http://avatar.csdn.net/A/0/5/3_sinat_26917383.jpg
http://blog.csdn.net/ITermeng
http://lib.csdn.net
http://blog.csdn.net/qq446282412
http://blog.csdn.net/ahence/article/details/75090340
http://blog.csdn.net/epubit17/article/details/75119653
http://blog.csdn.net/change_on
http://avatar.csdn.net/D/3/8/2_tianyaleixiaowu.jpg
http://img.blog.csdn.net/20170705115657679
http://csdnimg.cn/public/static/css/avatar.css
http://blog.csdn.net/a2011480169
http://blog.csdn.net/itmyhome
http://blog.csdn.net/sinat_26917383
http://avatar.csdn.net/F/0/E/3_10km.jpg
http://static.blog.csdn.net/ads/home_top2.html
http://csdnimg.cn/pubfooter/js/publib_footer.js
http://c.csdnimg.cn/pubfooter/js/tracking.js
http://blog.csdn.net/ouyang_peng/article/details/75146841
http://blog.csdn.net/taiji1985/article/details/75087742
http://img.knowledge.csdn.net/upload/base/1455589744328_328.jpg
http://avatar.csdn.net/A/4/1/3_u014738140.jpg
http://img.blog.csdn.net/20170714161848587
http://avatar.csdn.net/B/7/7/4_a2011480169.jpg
http://blog.csdn.net/u011304970/article/details/74989260
http://blog.csdn.net/happycxz/article/details/73223916
http://static.blog.csdn.net/static/js/apps/blog_index.js
http://avatar.csdn.net/5/C/4/3_sileixinhua.jpg
http://img.blog.csdn.net/20170711173622170
http://www.mycat.i
http://counter.csdn.net/pv.aspx
http://blog.csdn.net/Marksinoberg
http://blog.csdn.net/column/details/13719.html
http://avatar.csdn.net/C/C/1/3_u010989951.jpg
http://lib.csdn.net/base/react
http://blog.csdn.net/byeweiyang/article/details/75102051
http://static.blog.csdn.net/static/images/write_blog.png
http://static.blog.csdn.net/static/css/common_index.css
http://blog.csdn.net/blogdevteam
http://blog.csdn.net/neacy_zz/article/details/75090239
http://blog.csdn.net/sileixinhua/article/details/75091365
http://avatar.csdn.net/7/F/6/3_panxl6.jpg
http://static.blog.csdn.net/static/images/mod_viewpoint.png
http://static.blog.csdn.net/static/images/cloumn.png
http://avatar.csdn.net/A/A/E/3_happycxz.jpg
http://c.csdnimg.cn/public/common/toolbar/js/toolbar.js
http://avatar.csdn.net/B/D/6/3_neacy_zz.jpg
http://blog.csdn.net/wangyongyao1989
http://blog.csdn.net/chaoyuan899
http://img.blog.csdn.net/20170616193506768
http://blog.csdn.net/u011304970/article/details/74938457
http://avatar.csdn.net/3_guest.jpg
http://static.blog.csdn.net/static/images/export.png
http://blog.csdn.net/Neacy_Zz
http://avatar.csdn.net/F/A/3/3_itermeng.jpg
http://blog.csdn.net/u010989951
http://static.blog.csdn.net/static/images/icon_r.png
http://img.knowledge.csdn.net/upload/base/1453701371636_636.jpg
http://avatar.csdn.net/C/1/5/3_aqi00.jpg
http://avatar.csdn.net/3/2/7/3_chaoyuan899.jpg
http://blog.csdn.net/blogdevteam/article/details/75116901
http://avatar.csdn.net/3/B/2/2_stven_king.jpg
http://c.csdnimg.cn/public/favicon.ico
http://avatar.csdn.net/5/3/5/3_hopeztm.jpg
http://ads.csdn.net/js/async_new.js
http://csdnimg.cn/public/common/libs/bootstrap/css/bootstrap.css
http://blog.csdn.net/column/details/15386.html
http://blog.csdn.net/aqi00/article/details/75096214
http://blog.csdn.net/aqi00
http://avatar.csdn.net/9/4/7/3_change_on.jpg
http://blog.csdn.net/wangyangzhizhou/article/details/75195501
http://img.blog.csdn.net/20170714101354092
http://blog.csdn.net/hopeztm/article/details/75003369
http://static.blog.csdn.net/scripts/cnick.js
http://static.blog.csdn.net/static/css/blog_index.css
http://img.blog.csdn.net/20170705115941151
http://static.blog.csdn.net/static/images/opinion.png
http://img.knowledge.csdn.net/upload/base/1479972981201_201.jpg
http://img.blog.csdn.net/20170505163238984
http://img.blog.csdn.net/20170619113818542
http://lib.csdn.net/base/android
http://blog.csdn.net/epubit17
http://c.csdnimg.cn/pubfooter/js/publib_footer.js
http://blog.csdn.net/u011304970/article/details/75003397
http://blog.csdn.net/wangyongyao1989/article/details/75139633
http://blog.csdn.net/experts/rule.html
http://avatar.csdn.net/B/B/8/2_king1425.jpg
http://img.blog.csdn.net/20170518101810792
http://blog.csdn.net/u014738140
http://avatar.csdn.net/0/8/F/4_marksinoberg.jpg
http://static.blog.csdn.net/static/images/back_top.png
http://avatar.csdn.net/8/C/E/3_blogdevteam.jpg
http://ads.csdn.net/js/tracking.js
http://static.blog.csdn.net/static/images/blog_move_big.png
http://blog.csdn.net/stven_king
http://blog.csdn.net/sinat_26917383/article/details/75050225
http://avatar.csdn.net/D/B/1/3_epubit17.jpg
http://avatar.csdn.net/D/E/3/3_byeweiyang.jpg
http://blog.csdn.net/panxl6/article/details/75096149
http://static.blog.csdn.net/static/images/triangle_right.png
http://write.blog.csdn.net/postedit
http://blog.csdn.net/10km
http://blog.csdn.net/Byeweiyang
http://blog.csdn.net/wemedia/details.html
http://avatar.csdn.net/0/6/A/3_wangyongyao1989.jpg
http://blog.csdn.net/chaoyuan899/article/details/75089447
http://c.csdnimg.cn/public/common/toolbar/js/html.js
http://csdnimg.cn/public/common/libs/jquery/jquery-1.11.1.min.js
http://img.blog.csdn.net/20170705115746496
http://static.blog.csdn.net/static/images/icon_l.png
http://blog.csdn.net/10km/article/details/75095833
http://write.blog.csdn.net
http://blog.csdn.net/u011304970/article/details/74936112
http://static.csdn.net/public/common/toolbar/js/toolbar.js
http://blog.csdn.net/happycxz
http://blog.csdn.net/panxl6
http://static.blog.csdn.net/static/images/blog_move.png
http://avatar.csdn.net/A/5/7/3_taiji1985.jpg
http://blog.csdn.net/hopeztm/article/details/75101158
http://static.csdn.net/public/common/toolbar/css/index.css
http://bbs.csdn.net/topics/391959736
http://blog.csdn.net/hopeztm
http://blog.csdn.net/tianyaleixiaowu
http://blog.csdn.net/turingbooks/article/details/73480804
http://blog.csdn.net/itmyhome1990/article/details/74971622
http://blog.csdn.net/itermeng/article/details/75023320
http://img.blog.csdn.net/20170714100230514
http://blog.csdn.net/change_on/article/details/75134657
http://c.csdnimg.cn/public/common/toolbar/js/notify.js
http://static.blog.csdn.net/static/js/libs/html5shiv.min.js
http://blog.csdn.net/TaiJi1985
http://lib.csdn.net/base/ai
http://blog.csdn.net/King1425
http://blog.csdn.net/column/details/14549.html
输出信息

 

以上是关于Python开发模块:Urllib的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫开发之urllib模块详细使用方法与实例全解

Python学习之Web开发及图形用户界面模块

Python 的 urllib.parse 库解析 URL

Python 3:urllib 模块基本功能不起作用

urllib模块

爬虫--urllib模块