第一个Python小爬虫
这个爬虫是参考http://python.jobbole.com/81353/这篇文章写的
这篇文章可能年代过于久远,所以有些代码会报错,然后我自己稍微修改了一下,增加了一个getContentAll的方法
# -*- coding:utf-8 -*- __author__ = 'HK' import urllib
import urllib2
import re class Tool:
#去除img标签,7位长空格
removeImg = re.compile('<img.*?>| {7}|')
#删除超链接标签
removeAddr = re.compile('<a.*?>|</a>')
#把换行的标签换为\n
replaceLine = re.compile('<tr>|<div>|</div>|</p>')
#将表格制表<td>替换为\t
replaceTD= re.compile('<td>')
#把段落开头换为\n加空两格
replacePara = re.compile('<p.*?>')
#将换行符或双换行符替换为\n
replaceBR = re.compile('<br><br>|<br>')
#将其余标签剔除
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: #initalizing,get the base url,and set parments is only see up
def __init__(self, baseURL, seeup):
self.baseURL = baseURL
self.seeup = str(seeup)
#self.user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
#self.referer = 'http://tieba.baidu.com/p/4899608185?see_lz=1&pn=1'
#self.Host = 'tieba.baidu.com' #iput the index, get the pageindex current post
def getPage(self, pageNum):
try:
#header = {'User-Agent': self.user_agent, 'Host': self.Host, 'Referer': self.referer}
url = self.baseURL + '?' + 'pn=' + str(pageNum)
print url
request = urllib2.Request(url)
response = urllib2.urlopen(request)
content = response.read()
return content
except urllib2.URLError, e:
if hasattr(e, "reason"):
print u'链接百度贴吧失败,错误原因', e.reason
return None def getTitel(self):
page = self.getPage(1)
pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>', re.S)
result = re.search(pattern, page)
if result:
print result.group(1).strip()
else:
print 'there is no content catch the re'
return None def getContent(self, pageIndex):
pattern = re.compile('<div id="post_content_.*?>(.*?)</div>', re.S)
items = re.findall(pattern, self.getPage(pageIndex))
tool = Tool()
txt = ""
for item in items:
txt += '\t' + tool.replace(str(item)) + '\r\n'
return txt def getPageNum(self):
pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>',re.S)
result = re.search(pattern, bdtb.getPage(1))
if result:
return result.group(1).strip()
else:
return None def getContentAll(self):
pageMax = self.getPageNum()
txtlog = open('txtContent.txt', 'wb+')
txtlog.seek(0)
for index in range(1, int(pageMax)+1):
txtlog.write(str(index) + self.getContent(index))
txtlog.flush()
txtlog.close()
print 'Over' baseURL = 'http://tieba.baidu.com/p/4899608185'
bdtb = BDTB(baseURL, 1)
bdtb.getTitel()
print bdtb.getPageNum()
bdtb.getContentAll()
直接行就能看到结果
第一个Python小爬虫的更多相关文章
- 一个python小爬虫
自定义获取豆瓣网电影TOP250里的排名数量 主要思路:先由requests库获取html基本信息,然后用BeautifulSoup来进行html.parser格式解析,逐个获取Tag属性,并且对内容 ...
- 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)
用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气
- Day1:第一个python小程序
Day1:第一个python小程序与开发工具Pycharm 一.Hello World C:\Users\wenxh>python Python 3.6.2 (v3.6.2:5fd33b5, J ...
- 第一个python小脚本
第一个python小实验 前言 作为一个工作1年的linux运维搬砖师来说,发现没点开发能力真的是不好混啊.于是下定决心学习python! 直接上刚写的语句(大神莫鄙视) 通过控制台输入一个账号密码, ...
- 【现学现卖】python小爬虫
1.给小表弟汇总一个院校列表,想来想去可以写一个小爬虫爬下来方便些,所以就看了看怎么用python写,到了基本能用的程度,没有什么特别的技巧,大多都是百度搜的,遇事不决问百度啦 2.基本流程就是: 用 ...
- python小爬虫练手
一个人无聊,写了个小爬虫爬取不可描述图片.... 代码太短,就暂时先往这里贴一下做备份吧. 注:这是很严肃的技术研究,当然爬下来的图片我会带着批判性的眼光审查一遍的.... :) #! /usr/ ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- Python小爬虫-自动下载三亿文库文档
新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?o ...
- 发布一个Python小程序:ManHourCalendar
程序诞生的那些事儿 先聊聊背景资料档案.. 大约两年前,我只身前往岛国赚点外快.在那边的派遣制度工作中,存在一个大约叫每月的标准工作时间的概念,按照自家公司跟派遣目标公司(业界称为现场)的合同,规定了 ...
随机推荐
- Vue中table合并单元格用法
<table> <tr> <th>地名</th> <th>结果</th> <th>人名</th> < ...
- Oracle 查询合并列
在ORACLE 查询时,有时要将多个列合并成一行,其方法如下: 1. decode 函数 decode 函数的语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省 ...
- 小程序开发------mpvue开发时间轴
亲们支持我的新博客哦==>地址(以后更新会尽量在新博客更新,欢迎大家访问加入我的后宫w) ) 效果展示: 技术栈:mpvue demo==> 代码:
- Servlet工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 S ...
- python学习笔记_week27
search import time import random def cal_time(func): def wrapper(*args, **kwargs): t1 = time.time() ...
- leetcode39
public class Solution { List<IList<int>> list = new List<IList<int>>();//全部记 ...
- leetcode198
public class Solution { public int Rob(int[] nums) { ; ; ; k < nums.Length; k++) { int tmp = i; i ...
- Unity for VsCode
安装以下两个插件 以下设置VsCode在换行保存时不删除tab空格
- tkinter窗口居中方法
tkinter窗口居中 from tkinter import * class MyFrm(Frame): def __init__(self, master): self.root=master s ...
- ISNUMERIC使用说明和BUG
ISNUMERIC ( expression )参数 expression 要计算的表达式.返回类型 int 备注当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 ...