亲身试用python简单小爬虫

前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下。

以下是网上很容易搜到的一种方法:

 1 #coding=utf-8
 2 import urllib
 3 import re
 4
 5 def getHtml(url):
 6     page = urllib.urlopen(url)
 7     html = page.read()
 8     return html
 9
10 def getImg(html):
11     reg = r‘src="(.+?\.jpg)" pic_ext‘
12     imgre = re.compile(reg)
13     imglist = re.findall(imgre,html)
14     x = 0
15     for imgurl in imglist:
16         urllib.urlretrieve(imgurl,‘%s.jpg‘ % x)
17         x+=1
18
19
20 html = getHtml("http://tieba.baidu.com/p/2460150866")
21
22 print getImg(html)

我写的代码与之大同小异,但运行之居然没有反应;我甚至将代码直接copy下来运行,但还是不成功。

没办法,只好自己逐一调试。

首先我把获取到的html代码写入html.txt文件,方便我查看对照,这时,发现了第一个问题:通过urllib获得的html代码与浏览器中Ctrl+U查看到的代码并不是一回事。

接着,我用正则‘;src=(.*?imgsrc.*?\.jpg)‘去匹配html.txt中的代码,这时,关键问题出现了:匹配到的都是诸如http%3A%2F%2Fxx.jpg 这样的地址,这样问题就很明显了,在使用urllib获取html时,‘:‘和‘/‘被转码了。使用转码后的地址去下载图片当然是行不通的,需要将被转码的地址转回utf8编码。

以下是我对gethtml(url)的修改:

def gethtml(url):
    page=urllib.urlopen(url)
    html=page.read()
    html=re.sub(‘%3A‘,‘:‘,html)
    html=re.sub(‘%2F‘,‘/‘,html)
    return html

办法好像笨了一些,望大家多多指教。不过,这下程序就可以成功运行了~,分享下下载的图片,并附上地址:http://tieba.baidu.com/p/3604860421?lp=5027&mo_device=1&pn=0&

时间: 2024-08-05 19:15:39

亲身试用python简单小爬虫的相关文章

Python简单网络爬虫实战—下载论文名称,作者信息(下)

在Python简单网络爬虫实战—下载论文名称,作者信息(上)中,学会了get到网页内容以及在谷歌浏览器找到了需要提取的内容的数据结构,接下来记录我是如何找到所有author和title的 1.从soup中get到data类 soup中提供了select方法来筛选所需的类.该方法使用方法如下: articlename = soup.select('title') 该语句即将soup中所有的title元素放到articlename中.select也有其他用法 articlename = soup.s

Python网页小爬虫

最近右胳膊受伤,打了石膏在家休息.为了实现之前的想法,就用左手打字.写代码,查资料完成了这个资源小爬虫.网页爬虫, 最主要的是协议分析(必须要弄清楚自己的目的),另外就是要考虑对爬取的数据归类,存储.这是一个在线歌曲网站的爬虫,网站名 字就不说了,此贴目的是技术交流,请不用做其他用途! 相关技术点:http协议.js.AES.文件.文件夹操作.正则表达式.数据库技术.SQL -------------------------------------------分割线 以下 为设计思路------

python之小爬虫

#!/usr/bin/python #抓取网页上的图片保存 import urllib import urllib.request //python3版本将urllib2分成urllib.request和urllib.error import re def gethtml(url): page = urllib.request.urlopen(url) html = page.read() return html def getImages(html): reg = r'src="(.*?\.j

用Python写了个简单小爬虫

1 #coding: utf-8 2 3 import requests,urllib2,urlparse,time,sys 4 from bs4 import BeautifulSoup 5 6 #获取百度url wd查询关键子 pn第几页 rn 每页多少条 最大50条 7 #getbaidu.py 关键字 爬取页数 每页数量 8 #getbaidu.py example 10 50 9 #百度特性 每页显示条数为10 20 30类型的整数 10 11 12 type = sys.getfil

Python简单的爬虫

Python3 的requests的requests 库 1 安装: 在 配好python的基础上,在dos命令框中,使用 pip install requests 就行了 2 演示: python 用requests的get的方法爬取链接是很简单的,代码如下: import requests url='https://item.jd.com/5188000.html' try: r=requests.get(url) r.raise_for_status() r.encoding=r.appa

python的小爬虫的基本写法

1.最基本的抓站 import urllib2 content = urllib2.urlopen('http://XXXX').read() 2.使用代理服务器 这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等. import urllib2 proxy_support = urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'}) opener = urllib2.build_opener(proxy_suppo

四、简单小爬虫

import requests import xml.etree.cElementTree as EF from xml.parsers.expat import ParserCreate class DefaultsaxHandler(object): "sax处理器" def __init__(self,provinces): self.provinces=provinces #开始处理标签 def start_element(self,name,attrs): if name!=

Python简单小程序练习

1.九九乘法表 #!/usr/bin/python for i in range(1,10): for j in range(i): j += 1 print ("%d * %d = %-2d " %(i, j, i*j)), print "" 2.水仙花 #!/usr/bin/python l = [] for a in range (100,1000): if (a/100%10)**3 + (a/10%10)**3 + (a%10)**3 == a: l.ap

Python 简单业务爬虫

如何快速下载贴吧图片呢? #!/usr/bin/python # -*- coding: UTF-8 -*- import urllib import re def getHtml(url):     page = urllib.urlopen(url)     html = page.read()     return html def getImg(html):     reg = r'src="(.+?\.jpg)" pic_ext'     imgre = re.compile