对珊瑚老哥保证了自己会尽量补档动画MTV吧的资源,有空应该研究下爬虫了。

不要在意头图,我不会假借各位对某个动漫的爱好然后坑人的。无论是电磁炮吧主那种拿电磁铁糊弄人的奸商,还是逸站靠小林做幌子卖收费破烂乐色教程的那个"PYTHON大佬"

https://www.cnblogs.com/farewell-farewell/p/6055775.html

https://blog.csdn.net/wisedoge/article/details/51100290

抓取百度贴吧帖子

按照这个学习教程,一步一步写出来,中间遇到很多的问题,一一列举

首先, 获得 标题 和 贴子总数

# -*- coding:utf-8 -*-#!/user/bin/pythonimport urllibimport urllib2import reclass BDTB: #初始化,传入基地址,是否只看楼主的参数

def __init__(self, baseUrl, seeLZ):

self.baseURL = baseUrl

self.seeLZ = '?see_lz=' + str(seeLZ) #传入页码,获取该页帖子的代码

def getPage(self, pageNum): try:

url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum)

request = urllib2.Request(url)

response = urllib2.urlopen(request) return response.read() except urllib2.URLError, e: if hasattr(e, "reason"): print u"连接百度贴吧失败,错误原因", e.reason return None def getTitle(self):

page = self.getPage(1)

pattern = re.compile('

(.*?)',re.S)

result = re.search(pattern, page) if result: print "回复个数:"

print result.group(1) return result.group(1).strip() else: return None

baseURL = 'http://tieba.baidu.com/p/3138733512'bdtb = BDTB(baseURL, 1)

bdtb.getTitle()

bdtb.getPageNum()

PS:我用的火狐浏览器,查看网页源代码,鼠标右击查看 获得 快捷键 Ctrl-U

接下来 抓取 楼层的内容,写好的 程序如下

import urllibimport urllib2import reclass BDTB: #初始化,传入基地址,是否只看楼主的参数

def __init__(self, baseUrl, seeLZ):

self.baseURL = baseUrl

self.seeLZ = '?see_lz=' + str(seeLZ) #传入页码,获取该页帖子的代码

def getPage(self, pageNum): try:

url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum)

request = urllib2.Request(url)

response = urllib2.urlopen(request) return response.read() except urllib2.URLError, e: if hasattr(e, "reason"): print u"连接百度贴吧失败,错误原因", e.reason return None def getTitle(self):

page = self.getPage(1)

pattern = re.compile('

(.*?)',re.S)

result = re.search(pattern, page) if result: print "回复个数:"

print result.group(1) return result.group(1).strip() else: return None def getContent(self,page):

pattern = re.compile('

(.*?)

',re.S)

items = re.findall(pattern,page) for item in items: print item

baseURL = 'http://tieba.baidu.com/p/3138733512'bdtb = BDTB(baseURL, 1)

bdtb.getTitle()

bdtb.getPageNum()

bdtb.getContent(1)

但是运行之后一直报错,如下图:

检查代码无数次后,终于.....发现 getContent中 没有获取页码 T_T 在这个函数首句加上

page = self.getPage(1)

即可!!!

终于得到了内容部分,用一下工具类 可将乱七八糟的图片什么的代码去掉

#处理页面标签类class Tool: #去除img标签,7位长空格

removeImg = re.compile('| {7}|') #删除超链接标签

removeAddr = re.compile('|') #把换行的标签换为\n

replaceLine = re.compile('

|

|') #将表格制表替换为\t

replaceTD= re.compile('

') #把段落开头换为\n加空两格

replacePara = re.compile('

') #将换行符或双换行符替换为\n

replaceBR = re.compile('

|
') #将其余标签剔除

removeExtraTag = re.compile('<.*?>') def replace(self,x):

x = re.sub(self.removeImg,"",x)

x = re.sub(self.removeAddr,"",x)

x = re.sub(self.replaceLine,"\n",x)

x = re.sub(self.replaceTD,"\t",x)

x = re.sub(self.replacePara,"\n ",x)

x = re.sub(self.replaceBR,"\n",x)

x = re.sub(self.removeExtraTag,"",x) #strip()将前后多余内容删除

return x.strip()

最后最后,就是这样的了..

# -*- coding:utf-8 -*-#!/user/bin/pythonimport urllibimport urllib2import re#处理页面标签类class Tool: #去除img标签,7位长空格

removeImg = re.compile('| {7}|') #删除超链接标签

removeAddr = re.compile('|') #把换行的标签换为\n

replaceLine = re.compile('

|

|

|') #将表格制表替换为\t

replaceTD= re.compile('

') #把段落开头换为\n加空两格

replacePara = re.compile('

') #将换行符或双换行符替换为\n

replaceBR = re.compile('

|
') #将其余标签剔除

removeExtraTag = re.compile('<.*?>') def replace(self,x):

x = re.sub(self.removeImg,"",x)

x = re.sub(self.removeAddr,"",x)

x = re.sub(self.replaceLine,"\n",x)

x = re.sub(self.replaceTD,"\t",x)

x = re.sub(self.replacePara,"\n ",x)

x = re.sub(self.replaceBR,"\n",x)

x = re.sub(self.removeExtraTag,"",x) #strip()将前后多余内容删除

return x.strip() class BDTB: #初始化,传入基地址,是否只看楼主的参数

def __init__(self, baseUrl, seeLZ, floorTag):

self.baseURL = baseUrl

self.seeLZ = '?see_lz=' + str(seeLZ)

self.tool = Tool() #全局file变量,文件写入操作对象

self.file = None #楼层标号, 初始化为1

self.floor = 1 #默认标题

self.defaultTitle = u"百度某某贴吧"

#是否写入楼层分隔符标记

self.floorTag = floorTag #传入页码,获取该页帖子的代码

def getPage(self, pageNum): try:

url = self.baseURL + self.seeLZ + '&pn=' + str(pageNum)

request = urllib2.Request(url)

response = urllib2.urlopen(request) return response.read().decode('utf-8') except urllib2.URLError, e: if hasattr(e, "reason"): print u"连接百度贴吧失败,错误原因", e.reason return None #获得帖子标题

def getTitle(self,page):

page = self.getPage(1)

pattern = re.compile('

(.*?)',re.S)

result = re.search(pattern, page) if result: #print "回复个数:"

#print result.group(1)

return result.group(1).strip() else: return None #获得帖子的内容

def getContent(self,page):

page = self.getPage(1)

pattern = re.compile('

contents.append(content.encode('utf-8')) #print self.tool.replace(item)

#floor += 1

return contents

def setFileTitle(self,title): if title is not None:

self.file = open(title + ".txt", "w+") else:

self.file = open(self.defaultTitle + ".txt", "w+") def writeData(self,contents): for item in contents: if self.floorTag == '1':

floorline = "\n" + str(self.floor) + u"-------------------------------------\n"

self.file.write(floorline)

self.file.write(item)

self.floor += 1 def start(self):

indexPage = self.getPage(1)

page*********f.getPageNum(indexPage)

title = self.getTitle(indexPage)

self.setFileTitle(title) if pageNum == None: print "URL已失效,请重试"

return

try: print "该帖子共有" + str(pageNum) + "页"

for i in range(1,int(pageNum) + 1): print "正在写入第" + str(i) + "页数据"

page = self.getPage(i)

contents = self.getContent(page)

self.writeData(contents) except IOError,e: print "写入异常,原因" + e.message finally: print "Succeed~"

print u"请输入帖子代码"baseURL = 'http://tieba.baidu.com/p/' + str(raw_input(u'http://tieba.baidu.com/p/'))

seeLZ = raw_input("是否只看楼主,是输入1,否输入0\\n")

floorTag = raw_input("是否写入楼层信息,是输入1,否输入0\\n")

bdtb = BDTB(baseURL, seeLZ,floorTag)

bdtb.start()

关于decode和encode知识,查看 这个

decode的作用是将其他编码的字符串转换成unicode编码。str1.decode('gb2312')#表示将gb2312编码的字符串转换成unicode编码

encode的作用是将unicode编码转换成其他编码的字符串。str2.encode('gb2312')#表示将unicode编码的字符串转换成gb2312编码

PS:字符串在Python内部的表示是unicode编码。

因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

关于raw_input, 查看 这个

python中raw_input()与input()raw_input([prompt])

input([prompt])# prompt:如果参数存在,直接输出到屏幕上,不会再另起一行

raw_input 如其字面意思一样,返回输入字符的字符串形式,不做任何变换运算

input 本质上是使用raw_input()来实现的,即调用完raw_input()之后再调用eval()函数,调用如下:def input(prompt): return (eval(raw_input(prompt)))

eg. 输入纯数字字符串,返回数字类型;对合法的 python 数字表达式进行运算,返回运算后的结果....

PS:在python3.x中,已经删除raw_input(),取而代之的是input(),当然这仅仅是重命名,用法还是一样。因此在这里介绍的是 python2.x中的raw_input()和input(),在python3.x中只要按raw_input()的使用方式就行

上一篇详解前缀、中缀、后缀表达式

下一篇中缀表达式转换成前缀和后缀表达式这类题目的超实用解题技巧

python爬虫贴吧_Python爬虫——抓取贴吧帖子相关推荐

  1. python request url 转义_Python多线程抓取Google搜索链接网页

    1)urllib2+BeautifulSoup抓取Goolge搜索链接 近期,参与的项目需要对Google搜索结果进行处理,之前学习了Python处理网页相关的工具.实际应用中,使用了urllib2和 ...

  2. python selenium 处理弹窗_python+selenium 抓取弹出对话框信息

    抓取弹出对话框信息,困挠了我很久,我百度了很久,一直没有找到我想要的内容.最近学习到了. 有两种方法: 1.driver.switch_to.alert.text 2.result = EC.aler ...

  3. python 弹出对话框_python+selenium 抓取弹出对话框信息

    抓取弹出对话框信息,困挠了我很久,我百度了很久,一直没有找到我想要的内容.最近学习到了. 有两种方法: 1.driver.switch_to.alert.text 2.result = EC.aler ...

  4. python播放视频代码_python脚本抓取优酷在线视频地址代码

    <派森>(Python)3.13 win32 英文安装版 类型:编程工具大小:21M语言:英文 评分:8.7 标签: 立即下载 喜欢优酷的视频,但是要下载它的客户端才能下载在线的视频,这一 ...

  5. python保存表情包_Python BeautifulSoup抓取表情包并保存

    完美解决斗图表情包不够的状况: # -* - coding: UTF-8 -* - #导入第三方库 import urllib from bs4 import BeautifulSoup import ...

  6. python爬虫资源大全_Python爬虫抓取纯静态网站及其资源(基础篇)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:程序员宝库 **( 想要学习Python?Python ...

  7. 如何用python爬股票数据_python爬虫股票数据,如何用python 爬虫抓取金融数据

    Q1:如何用python 爬虫抓取金融数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为 ...

  8. python基金预测分析_Python爬虫抓取基金数据分析、预测系统设计与实现

    版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156231.html 目前在开发一款基于Python的基金爬取.分析.预测系统,目前已经开 ...

  9. python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  10. python中国大学排名爬虫写明详细步骤-Python爬虫--2019大学排名数据抓取

    Python爬虫--2019大学排名数据抓取 准备工作 输入:大学排名URL连接 输出:大学排名信息屏幕输出 所需要用到的库:requests,bs4 思路 获取网页信息 提取网页中的内容并放到数据结 ...

最新文章

  1. windows批处理的感叹号和变量延迟扩展
  2. origin安装包_作图技巧|研究生需要会的20个Origin操作,作图又快又好看(二)...
  3. mysql知识结构图_MySql知识结构说明
  4. CentOS 7安装zabbix-2.4.8监控
  5. C++ Primer (二)目录
  6. Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
  7. OKR和KPI的区别是啥?
  8. netapp存储 api接口
  9. ArcGIS API For JavaScript 利用GP服务生成等值线、等值面(一)之生成等值线
  10. HDU1862 FLY
  11. 1080P or 4K?——明基 TK800M 4K HDR家用投影体验
  12. python-装饰器的使用详解
  13. 还在找面试题?不要盲目找了,这份 Java 面试通关手
  14. Redis高可用哨兵Sentinel
  15. mysql解压版id是什么_mysq解压版安装(windos 7 10)
  16. Nexus的安装和应用
  17. Cloudera Manager集群(CDH6.2.0.1)完整搭建指南
  18. expand解压缩cab文件
  19. 蚂蚁金服@玉伯:我是阿里P10成长之路!
  20. 教你破解电脑五种开机密码方法

热门文章

  1. 音频知识之OGG格式分析
  2. [Matlab有限元分析] 1.有限元分析的发展、基本概念和特点
  3. 超级记事本android,基于Android的超级记事本APP设计.doc
  4. 2019年计算机考研408历年真题2009-2019下载免费下载
  5. Jmeter之接口测试流程详解
  6. TT畅聊物联网(一)-初识物联网
  7. 基于C#和SQL SERVER的企业进销存管理系统的设计和实现
  8. java项目实现ldap认证
  9. Midas GTS NX三维地质建模及边坡稳定性分析
  10. JUnit 5- 概述