【python】版本35 正则-非库-爬虫-读写xlw文件
#交代:代码凌乱,新手一个,论坛都是高手,我也是鼓了很大勇气,发出来就是被批评和进步的
from urllib import request
from urllib import request
from urllib import error
import io
import sys
import re
from functools import reduce
import xlrd,xlwt
import numpy as np
import time
from xlutils.copy import copy
from openpyxl import Workbook
from openpyxl import load_workbook
#python 35
#
class Spider():
new_excel_file = xlwt.Workbook(encoding='utf-8')
readbook1 = xlrd.open_workbook(r'C:\\Users\\Administrator\\Desktop\\mingshi1.xlsx')
url = 'http://m******?id='
one_pattern = '<div id="artDiv" style="border:0; background-color:#fff; font-size:14px;line-height:180%">([\s\S]*?)</div>'
lieshu=0 #one1_pattern = '>([\s\S]*?)<' def fetch_content(self,url1):#正则匹配
while(1):
try:
r = request.urlopen(url1)
htmls = r.read()
htmls = str(htmls,encoding='utf-8')
#print(htmls)
return htmls
break except error.HTTPError as e:
print(e.code)
self.Error_input() except error.URLError as e:
print(e.reason)
self.Error_input() def Error_input(self):#遇到URL或者HTTP错误提示
Error_if = input("Some Error, (enter)here we go?**************************(everything) Exit")
if Error_if:
sys.exit()
else:
pass def analysis(self,htmls):#处理正则后的数据
one_html = re.findall(Spider.one_pattern,htmls)
#print (one_html)
if one_html:
for html in one_html:
content = html
# content = re.findall(Spider.one_pattern,html)
print(len(content))
if len(content):
t1 = reduce(lambda x,y:x+y,content)
else:
t1 = ' '
else:
t1= ' '
#print(t)
return t1 def go(self):#循环 读 xlw和循环 写 xlw
"""
循环读xlw
"""
#定义循环 读 xlw的变量
readbook = xlrd.open_workbook(r'C:\\Users\\Administrator\\Desktop\\mingshi.xlsx')
table = readbook.sheets()[0]
start=1 #开始的行
end=639 #结束的行 list_values=[]
#执行循序 1.1循环 读 第1列xlw的代码块,上面变量有行数的开始行和结束行
#
for x in range(start,end):
values=[]
row =table.row_values(x)
for i in range(1):
values.append(row[i])
list_values.append(values)
datamatrix=list(np.array(list_values))
#print(type(datamatrix))
"""
循环写xlw
"""
#定义循环 写 xlw的变量
wb = load_workbook(r'C:\\mingshi11111.xlsx')
ws=wb.active
hangshu = 1 #行
lieshu = 5 #列
rows=[]
for row in ws.iter_rows():#获取所有行
rows.append(row)
"""
#抛弃使用xlsw库,缺点:写xlw会有大小限制,超过限制会出错
# 写xls w for循环外
# book1 = xlrd.open_workbook(r'路径')
# book2 = copy(book1)#拷贝一份原来的excel
# sheet = book2.get_sheet(0)#获取第几个sheet页,book2现在的是xlutils里的方法,不是xlrd的
"""
#循环读xlw的代码块和url+id处理
for y in datamatrix:
url1=("http://m******px?id="+str(int(y)))
#url1=("http://m******x?id=20131210120041954")
#
print(('*')*127)
print("url:"+url1) #执行循序2.1 打印第一个url
print(('*')*127)
htmls = self.fetch_content(url1) #执行循序2.2 正则htmls
self.analysis(htmls) #执行循序2.3 过滤htmls放入list后使用reduce追加内容,变成一体连续内容 """
openpyxl_start
"""
#执行循序3.1 写xlw文件
print('正在写入第'+str(hangshu)+'行')
if hangshu == 639:# break
else:
rows[hangshu][lieshu].value = self.analysis(htmls) #[hangshu][lieshu]第hangshu行,第lieshu列
wb.save("C:\\mingshi111111.xlsx")
print('已写入第'+str(hangshu)+'行')
hangshu+=1 #
"""
写xls w 循环内
""" """
if lieshu==639: #写循环次数 break
else:
sheet.write(lieshu, 5, self.analysis(htmls))
book2.save('c:\\ms.xls')
lieshu+=1
"""
"""
注释
"""
print(('*')*127)
print('sleep 1秒')
print(('*')*127)
time.sleep(1) spider = Spider()
spider.go()
【python】版本35 正则-非库-爬虫-读写xlw文件的更多相关文章
- Python 实现 Excel 里单元格的读写与清空操作
#coding=utf-8 # coding=utf-8 作用是声明python代码的文本格式是utf-8,python按照utf-8的方式来读取程序. # 如果不加这个声明,无论代码中还是注释中有中 ...
- 使用 pyenv 可以在一个系统中安装多个python版本
Installl related yum install readline readline-devel readline-static -y yum install openssl openssl- ...
- Mac OS下使用pyenv管理Python版本
问题的由来 在开发过程中,可能会遇到多个版本同时部署的情况. Mac OS自带的Python版本是2.x,自己开发需要Python3.x 系统自带的是2.6.x,开发环境是2.7.x 由于Mac机器系 ...
- 使用 pyenv 管理 Python 版本
http://einverne.github.io/post/2017/04/pyenv.html Posted on 04/22/2017 by Ein Verne | View revisio ...
- linux下面升级 Python版本并修改yum属性信息
最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...
- 编程读写CAD文件验证
背景 B/S应用系统,根据用户上传数据:业务数据和CAD坐标数据,经过一系列运筹算法运算后,输出一批坐标数据,作为给用户的规划结果.此时需要方便直观的给用户展示坐标数据.可选方式有两个: web页面画 ...
- python版本及ML库
一:关于Python版本的选择问题 关于Python的选择问题:要看学术界能不能把科学库迁移到Python3. 1:多个版本共用: 最近发现SciPy的最高版本是3.2,只能是退而求其次,不使用最新版 ...
- 【归纳】正则表达式及Python中的正则库
正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...
- Hadoop streaming使用自定义python版本和第三方库
在使用Hadoop的过程中,遇到了自带python版本比较老的问题. 下面以python3.7为例,演示如何在hadoop上使用自定义的python版本以及第三方库. 1.在https://www.p ...
随机推荐
- Startls Back 引起的 win10升级之后的闪屏问题
win10 更新之后出现闪频问题. 有人说是和startls back 有关,需要卸载startls back, 但是进入安全模式下显示此 程序无法打开,无法卸载. 后来看到有人更新到startls ...
- flag读取控制台参数
package main import ( "fmt" "os") func main() { arg := os.Args if len(arg) < ...
- expdp错误案例
转自:https://www.cnblogs.com/kerrycode/p/3960328.html Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例,下面总结一 ...
- MQTT
1.IBM提出,适用于IOT,订阅和发布模式. 2.订阅和发布模式:这种模式是异步的形式,有些类似于邮件接发的形式,发送者将邮件发至代理,接收者如果没同时接收,也不影响发送者的二次发送. 3.主题模式 ...
- linux vsftp 简单配置
查看自己是否安装vsftp rpm -qa | grep vsftp rpm -qa 查看自己已安装的包 过滤vsftp systemctl rsetart vsftpd 重启服务 先关闭防火墙 sy ...
- vscode调试golang环境搭建及配置
准备VSCode 在官网下载最新版的VSCode: 安装Golang插件 打开扩展面板 VSCode->查看->扩展 找到Go插件 在搜索框里输入Go, 找到第二行写有 Rich Go l ...
- vue组件通信新姿势
在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...
- 《python语言程序设计》_第5章_循环
#5.1_引言 程序1: 结果: 程序2: 结果: sum is 45 ##注意整个循环语句都要内缩进循环内部 ##ctrl+c中止一个无限循环运行 程序清单5-1: 结果: #5.2.1_实例研究: ...
- linux配置gitlab步骤
1.安装git命令 yum install -y git 2.查看安装git的版本 git --version 3.创建用于保存项目的文件夹 mkdir 项目文件夹 4.切换目录到项目文件夹 cd 项 ...
- 在使用可变数组过程中遇到*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'问题
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFD ...