• 哈罗啊,又见面了,这几天考试+各种事情,耽误了点时间,不够我终于又做了个案例
  • 还是看着知乎大神的帖子Wakingup的帖子
  • 话不多说,上代码
'''根据知乎大神代码作者:高佳乐'''
##先导入各种库
import re                                      ##re正则表达式
import requests                                ##获取url
from bs4 import BeautifulSoup                  ##bs4解析
import time                                    ##爬虫嘛,要有礼貌
import random                                  ##开始我想用随机数转换head来着,试了试没事
import os                                      ##弄文件及,一页一个文件夹
from lxml import etree                         ##xpath的库##定义一个类,爬虫
class spider():##初始化def __init__(self):                        ##初始化函数self.url = 'http://tieba.baidu.com'     ##使他的初始化函数是贴吧首页return##获取贴吧的urldef getUrl(self,url):                       ##获取url的函数(参数是一个url,网址)html = requests.get(url)                ##html是requests.get获取到的源码html_text = html.text                   ##html_text是上边获取到代码后然后书写进来return html_text                        ##这个函数返回html_text以便赋值##获取帖子的标题def title(self,url):html = self.getUrl(url)                 ##html是用getUrl获取到的代码soup = BeautifulSoup(html,'lxml')       ##soup是用BeautiflSoup解析的结构树,用的是lxmltitle = soup.find(class_="core_title_txt")##然后获取class=“core_title_text”的节点#print('这个贴吧的标题是:',title.get_text())    ##这个已经注释了,解释也没用了return title.get_text()                     ##返回的是上边获到标题节点的内容##获取帖子的总页数def pages(self,url):                        ##这个函数是获取总页数html = self.getUrl(url)                 ##html是用getUrl获取到的代码soup = etree.HTML(html)                 ##然后soup是用etree.HTML把上边获得的代码解析,以便使用xpathpages = soup.xpath('.//div[@id="thread_theme_5"]//li[@class="l_reply_num"]/span[last()]')##因为用正则有点麻烦我感觉,用bs4我也觉得有点烦,就用了xpath,xpath刚开始用,原谅我太菜for page in pages:                      ##上边的xpath是在此节点中不管那个位置的id=“thread_theme_5的div里不管在哪的class=“l_reply_num”的li的最后一个spanbreak;                              ##因为获得的是列表,所以要遍历,因为我只获取一个值,所以我在这个循环里循环后直接结束return page.text                        ##因为上边返回的是一个那样的,所以返回值带上text返回文本##获取楼主和内容def content(self,url):                      ##获取楼主的内容,参数是urlhtml = self.getUrl(url)                 ##html是用getUrl获取到的代码##我用的正则,有点麻烦,用在我这个帖子里好使,别的没准就报错了,推荐用xpath或者Bs4zhengze = re.compile('<li.*?_author_name.*?_blank.*?(.*?)</a>.*?d_post_content.*?save_face_bg_hidden.*?d_post_content j_d_post_content.*?>(.*?)</div>',re.S)contents = re.findall(zhengze,html)     ##上边是定义一个正则,这里就是使用在html筛选上边条件的全部节点,返回列表number = 1 ##计数器,这是个记住器,以便记住第几楼for i in contents:print('第%d个帖子\n楼主:%s\n内容:%s\n'%(number,i[0],i[1]))print()number+=1##获取图片def img(self,url):                          ##获取图片的函数html = self.getUrl(url)                 ##html也是用getUrl获取的代码soup = BeautifulSoup(html,'lxml')       ##soup是用BS4解析的代码,用的lxmlimages = soup.select('img[class="BDE_Image"]')##然后用select查到符合‘class=“BDE_Image”’的img标签,返回列表number = 0                                 ##这是个计数器,imgs = []                               ##这里创建一个空列表以便吧图片地址存到这里,你会问上边不是有了吗,其实上边是有列表,但是上边的是节点的列表就是还设有别的属性,咱们只要scr属性的for i in images:                        ##这是一个计一页有多少图片的方法,当然这是最屌丝的方法number+=1                           ##读取一个节点,number+1if number > 0:                          ##计数下来,number>0的话print('厉害,厉害,这里有%s个图片,爬完就跑,刺激'%number)##输出这点话else:                                   ##反之就是<=0  就说这话print('这里没有图片,快跑')number = 1                              ##这里number在=1,以便计数for image in images:                    ##用image在images读取,也就是在上边爬到的图片节点中读取img = image.get('src')              ##这里get(src)就是,img只获得这个节点的src属性,就是纯url了print('正在爬取,第%d图片:'%number,img)##输出上边获取图片的urlimgs.append(img)                    ##然后把上边的纯连接img追加到开始创建的那个空列表里,这不就会成为一个纯连接的列表了number+=1                           ##number+1 以便计数return imgs                             ##返回那个纯连接的列表##创建文件夹,和图片def make(self,name):                        ##创建文件夹的函数dir = os.getcwd()+'\第'+str(name)+'文件夹'  ##先定义文件的名字,就是os.getcwd获取当前工作路径,+文件夹的名# 去除首位空格dir = dir.strip()# 去除尾部 \ 符号dir = dir.rstrip('\\')##判断目录是否存在panduan = os.path.exists(dir)               ##exists判断目录是否存在,是=true,否=Falseif panduan:                                 ##如果有就已存在print(dir,'已存在')else:                                       ##反之,也就是假,没有os.makedirs(dir)                        ##就创建这个文件夹,当然我这的路径是绝对路径print(dir,'已创建成功')return dir                                  ##返回那个文件夹的路径,以便下边的切换路径##保存图片def saveimage(self,url):                        ##保存图片了images = self.img(url)                      ##images是用img获取到的纯连接的那个列表num = 1                                     ##num=1计数器for img in images:                          ##用循环让img在那个返回的纯连接的列表里读取fil = str(num) + '.jpg'                 ##然后定义图片名字.jpghtml = requests.get(img).content        ##因为直接一个地址是写不到图片里边去的,要写入二进制,所以要先获取那个图片的内容,然后.content转化成二进制f = open(fil,'wb')                      ##然后打开fil的文件可写可读,没有就是创建f.write(html)                           ##然后写入图片的二进制f.close()                               ##然后关闭,随手关闭是个好孩子num+=1                                  ##当然计数器要+1print('第%s保存成功'%fil)                ##提示图片保存成功更有逼格##操控,一个贴吧的操控def all(self,number):                           ##这个函数就是把所有的方法封装到这里##贴吧地址是self.url+帖子号url = self.url+'/p/'+str(number)            ##因为地址也是首页+帖子号,这个也是第一页##获取标题title = self.title(url)                     ##有title方法获取标题print('这个帖子的标题是%s'%title)##获取总页数page = int(self.pages(url))                 ##用pages获取帖子总页数,并转换成整数型,以便下边的+1##根据总页数获取全部的页数,并获取图片num = 1                                     ##num这里就是计数,页数了print('第1页')                                ##这里是第一页##获取内容self.content(url)                           ##第一页是不加pn的所以要单独分开来获取,url是上边弄得首页+帖子号,这里是获取内容和楼主self.img(url)                               ##这里是获取图片的详细资料dir = self.make(num)                        ##这里是创建文件夹,因为一页保存一个文件夹,所以这是第一个os.chdir(dir)                               ##上边创建好文件夹后,转换到文件夹下self.saveimage(url)                         ##然后保存,然后就跑num+=1                                      ##第一页保存了,当然是第二页了,后边的页数也不一样了,for i in range(num,page+1):                 ##之前获取到的总页数在这里,因为要获取全部,第一页之前已经获取了,这里既是从第2页开始到总页数+1后停止,为什么+1?因为for取首不娶尾url_2 = url + '?pn=' + str(i)           ##这里是给每页的url获取,因为第二页后每页都是首页+帖子号+?pn=页数了print('第%d页'%i)                         ##计数第几页time.sleep(1)                           ##爬虫要礼貌,礼貌,所以要sleep,1.。其实我打算想着0.1,但是为了世界和平所以要大点了,→_→self.content(url_2)                     ##获取第i页这内容self.img(url_2)                         ##获取第i页图片详情dir = self.make(i)                      ##然后创建第i个文件夹,根据i的数创建os.chdir(dir)                           ##然后切换到新创建的第i个文件夹里time.sleep(1)                           ##然后讲一下礼貌self.saveimage(url_2)                   ##然后保存第i页的图片time.sleep(1)                           ##再讲一下礼貌img = spider()
img.all(int(input('输入帖子号')))
  • (这段是一个内心的小活动,可以省略看下边)
    学校换老师开始前端实例了┓( ´-` )┏,偷偷告诉你们我其实学的专业是ui设计,不会代码的ui不是一个好美工( ̄ー ̄),所以我决定好好学前端了,据说这样可以避免以后工作上和程序员的矛盾,嘛哈哈哈。当然爬虫我也要抓住,好不容易有这样的机会。

  • 这里,这次是把贴吧,旅游吧里的一个帖子爬图片和内容,足不出户,就可以看美景,还出去什么旅游,还不如在宿舍乖乖敲代码。emm对了我那个抓取楼主和内容的时候用的正则,可能我这好使别的就不好使了,没时间改xpath了(其实不也不知道能不能改),见谅。

  • 好了到了这就要再见了,砸门下次再见。坚持,加油,努力。

鸟与虫(三)贴吧,我想粗去玩相关推荐

  1. 2017云栖大会门票转让_2017云栖大会早鸟票最后三天!快来抢票吧!

    北京时间10月11日至14日,2107年度云栖大会将会在美丽的杭州云栖小镇国际会展中心正式召开.现在大会官网的售票正在如火如荼的进行中,VIP票.ATEC票等迅速售罄!早鸟票还有三天就要截止, 9月1 ...

  2. 汉语言可以转计算机考研吗,我是一名学汉语言文学专业的大三本科生,现在想跨专业,考学科教育(历史)研究生...

    我是一名学汉语言文学专业的大三本科生,现在想跨专业,考学科教育(历史)研究生以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧 ...

  3. 用devc++表白_表白 | 大三,女,想找一个长得帅的175以上的小哥哥谈恋爱

    『表白置顶』 戏要演就演全套的好么?一面说还是做好朋友吧快快乐乐一面对我不冷不淡拉开距离惜字如金爱搭不理,一面说我不是那种"喜欢"你了只是朋友间的喜欢了一面要求我甩甩脑喝脑残水儿忘 ...

  4. 鸟与虫(四)pexels搜到的我都想要,

    啊哈,又见面了,我把学校的项目做完了,然后趁自己还没生爬虫,就做了这个 老样子,还是看的知乎大神 然后这个做的是运用pexels网站,pexels是一个免费搜索图片的网站,然后就是运用它搜索后的url ...

  5. 鸟与虫(五)豆瓣我想看高分电影

    哈罗有见面了,几天刚刚验收学校仿站项目,就来赶博客,上课赶得哦. 我的爬虫原则: 爬虫就要有礼貌,爬虫与反爬虫的战争很奇妙.呸,很费精神. 话不多说上代码 '''这次是抓取豆瓣网的前100部高分影片本 ...

  6. 经典《像素鸟》游戏,难道你不想自己动手开发一个嘛(附源码免费下载)

    经典的飞机大战游戏,难道你不想自己动手开发一个嘛! 语言:Java 代码的编译软件:Eclipse 如果你用的也是eclipse的话 直接导入文件 就可以 ,如果不是的话,自己建一个项目,将代码cop ...

  7. 211大三会计女生,想做HR,要不要去英国读一年制硕士?

    点击上方蓝字关注「中产之路」 星友提问,获当事人同意,发表在这里. 京杭君~看了群友的意见和观点有很多共鸣,现在个人有一个小问题不知道京杭君能不能给点建议,我本人目前是大三,中部某211院校会计学在读 ...

  8. 三年级下册我想发明的机器人_3年级我想发明的机器人作文300字(共5篇)

    如果我是发明家 宁夏回族自治区银川市西夏区第五小学四年级3班万苗苗 如果我是发明家,我想发明一辆汽车,它是一辆可以自动驾驶,还不用汽油,而是一辆环保的太阳能汽车,他还会飞,会变形. 开着它,等他把你送 ...

  9. 献给准大三的童鞋们,想要在暑假里找个java实习工作.

    如果你也同样准大三,并且在这个暑假里打算找个实习工作,那么在这个分享下我的经历. 本人2015级,成都三本大学在读,计算机科学与技术专业,专业同样是我的爱好.在周边朋友的影响下决定早点出去实习哈,尝试 ...

最新文章

  1. C++ stringstream 简化数据类型转换
  2. kafka删除topic
  3. docker系列之file基本操作
  4. 让JavaScript像C#一样支持Region
  5. LeetCode 1770. 执行乘法运算的最大分数(DP)
  6. linux uvc stm32,linux uvc深入理解(三)
  7. Unity 项目 - Ruby‘s Adventure 学习笔记
  8. 遍历Page的Controls集合
  9. Android 自定义AlertDialog(退出提示框)
  10. 正则表达式3-兄弟的回复
  11. 机器视觉基础知识(一)
  12. vue3+ts使用Ant Design实现表格序号自增
  13. ​LeetCode刷题实战512:游戏玩法分析 II
  14. Android studio 运行警告 We recommend using a newer Android Gradle plugin to use compileSdk = 33
  15. 这次经历给我埋下了学理财的种子
  16. 阿里云服务器如何进行快照备份
  17. 85 R 银行信用卡风控评分数据分析
  18. Problem A: 算法4-5:求子串位置的定位函数
  19. i510400和i512400差距
  20. Prometheus监控Kubernetes-1 架构调研

热门文章

  1. win10热点 ip配置失败
  2. c语言:“有一个已排好序的数组,要求输入一个数后,按原来的规律将它插入数组中” 的程序分析及详细代码
  3. 深度学习分析--TextCNN算法原理及分类实现
  4. 2018主流服务器cpu,【热门服务器CPU排行榜】2021热门服务器CPU排名_热门服务器CPU排行榜10强-太平洋产品报价...
  5. 一个清华保送生妈妈对竞赛的感受,自主招生家长都要看看!
  6. 【Unity技术积累】人物移动 坦克式移动 WASD 动画
  7. Neo4j:一、CQL语句
  8. 基于感应器的智能求救系统----以android为例实现
  9. 笔记本连接显示器后没有声音_笔记本连外接显示器没声音怎么办
  10. Windows平台快速安装MongoDB和Robo 3T