Python培训
400-996-5531
首先,新人,你们语法上一定要整清楚,特别是缩进。python跟#不一样的是没有大括号区分代码块,而是用缩进行。来区分。所以这块没明白,就先别急着动手弄。等语法上琢磨的差不多了,大概的if会写,函数会写。简单的爬虫基本就能实现了。我爬的是一个贴吧搞笑图片的帖子。各种表情包,也会方便以后斗图,哈哈。
这是需要导入的包,我这是python3 的,python2 的导包会有区别。前面两个没啥可说的,后面的两个是我为了写随机数引得,这个随机数有啥用,等下再说。然后就是需要获取网页源代码。
def getHtml(url):page = urllib.request.urlopen(url)html = page.read()return html
然后加上咱们需要爬取的网址,因为我们是多页爬取,不同网页参数不同,我们需要爬取的帖子,只有pn参数在变化,所以用for循环,很快就能拿到每页的url。
for i in range(15):#多少页你写多少就行了 i=i+1# ------ getHtml()内输入任意帖子的URL ------ url='(i) html = getHtml(url) # ------ 修改html对象内的字符编码为UTF-8 ------ html = html.decode('UTF-8')
取到图片,这里需要用到正则表达式,说实在,网上有很多这种表达式,仿照着写就行了。这是根据网页源代码其中图片参数来的。想套代码的这块一定要注意哦。
def getImg(html): # ------ 利用正则表达式匹配网页内容找到图片地址 ------ reg =r'class="BDE_Image" src="(.+?\.jpg)"' imgre = re.compile(reg); imglist = re.findall(imgre, html) return imglist
最后就是获取所有图片了,这里就提到了前面的随机数。我当时写完多页爬取后,出现了很烦的问题。就是我存完第一页,再存取第二页,第二页图片会覆盖第一页的。想半天才发现是循环下载的图片名相同,所以导致被覆盖。然后我就用了最无脑的办法。给图片名加随机字符串。总算实现了400多张搞笑图片的下载(大神都是每页建不同文件夹的-。-!)
imgList = getImg(html) for imgName in imgList print imgName imgName = 0 for imgPath in imgList: #------ 这里最好使用异常处理及多线程编程方式 ------ salt = ''.join(random.sample(string.ascii_letters + string.digits, 2))#防止因为图片重名被覆盖,定义一个随机字符串,加到图片名上 print(imgPath) f = open("pic/"+salt+str(imgName)+".jpg", 'wb') f.write((urllib.request.urlopen(imgPath)).read()) f.close()imgName =imgName+1 print("已经下载全部图片!")
我这个帖子页数不是太多,所以速度上还能接受,如果爬取大的帖子,几百页的,最好用多线程处理。这样会快上很多。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved