#交代:代码凌乱,新手一个,论坛都是高手,我也是鼓了很大勇气,发出来就是被批评和进步的

 
#需求:需要对某网站的某id子标签批量爬取,每个网页的id在xlw里,爬取完,再批量存取到这xlw里的第6行
 
#思路:1.批量从xlw读url;2.批量正则内容;3.批量写xlw
 
"""              ------------------警告
 
纯新手代码,代码凌乱,没有多线程,大概有600多网页,我还sleep1秒,没有用bs4其他的爬虫库,代码没啥亮点,
 
主要就是
 
正则到的内容list存储并使用reduce,追加连在一次,是内容连续#一开始我是两次正则,然后追加,使原本分散在各个标签的内容连续在一起,最后就需求降低,只需要把子标签内容抓到就好。
 
读写xlw的两个库openpyxl和xlrd,xlwt的取舍优缺点,
 
还有如果request到某页面,如果无响应非404等服务器错误时,使用了try反复request该页面
 
"""
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文件的更多相关文章

  1. Python 实现 Excel 里单元格的读写与清空操作

    #coding=utf-8 # coding=utf-8 作用是声明python代码的文本格式是utf-8,python按照utf-8的方式来读取程序. # 如果不加这个声明,无论代码中还是注释中有中 ...

  2. 使用 pyenv 可以在一个系统中安装多个python版本

    Installl related yum install readline readline-devel readline-static -y yum install openssl openssl- ...

  3. Mac OS下使用pyenv管理Python版本

    问题的由来 在开发过程中,可能会遇到多个版本同时部署的情况. Mac OS自带的Python版本是2.x,自己开发需要Python3.x 系统自带的是2.6.x,开发环境是2.7.x 由于Mac机器系 ...

  4. 使用 pyenv 管理 Python 版本

    http://einverne.github.io/post/2017/04/pyenv.html   Posted on 04/22/2017 by Ein Verne | View revisio ...

  5. linux下面升级 Python版本并修改yum属性信息

    最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...

  6. 编程读写CAD文件验证

    背景 B/S应用系统,根据用户上传数据:业务数据和CAD坐标数据,经过一系列运筹算法运算后,输出一批坐标数据,作为给用户的规划结果.此时需要方便直观的给用户展示坐标数据.可选方式有两个: web页面画 ...

  7. python版本及ML库

    一:关于Python版本的选择问题 关于Python的选择问题:要看学术界能不能把科学库迁移到Python3. 1:多个版本共用: 最近发现SciPy的最高版本是3.2,只能是退而求其次,不使用最新版 ...

  8. 【归纳】正则表达式及Python中的正则库

    正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...

  9. Hadoop streaming使用自定义python版本和第三方库

    在使用Hadoop的过程中,遇到了自带python版本比较老的问题. 下面以python3.7为例,演示如何在hadoop上使用自定义的python版本以及第三方库. 1.在https://www.p ...

随机推荐

  1. dubbo入门学习 四 注册中心 zookeeper入门

    一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...

  2. mui getJSON实现jsonp跨域

    //刚开始做APP的时候,后台给的方式是jsonp,然后就百度mui框架的jsonp跨域,看了好多文章,都说可以支持,但是大部分都是直接把别人复制来的,都不知道是不是真的能支持,做好打包完的时候,下载 ...

  3. C#遍历SharePoint文档库下所有文档包括文档库中子文件夹下所有文档

    /// <summary> /// 获取取子文件下所有文件 /// </summary> /// <param name="web"></ ...

  4. VS2015环境下生成和调用DLL动态链接库

    一.生成动态链接库: 1.打开VS2015->文件->新建->项目->Visual C++->Win32->Win32控制台应用程序->将名称改为dll_ge ...

  5. 1013. Battle Over Cities 用dfs计算联通分量

    使用一个标记数组,标记 节点是否已访问 int 连通度=0 dfs(node i) {标记当前节点为以访问 for(每一个节点) {if(当前几点未访问 并且 从i到当前节点有直接路径) dfs(当前 ...

  6. 使用IDEA进行版本控制

    1.使用IDEA进行版本控制 创建git repository add-添加到暂存区 commit-提交到本地库 push-推送指定远程库(自己的) idea上的pull指的是合并(merge),并非 ...

  7. 11个炫酷的Linux终端命令大全

    我已经用了十年的Linux了,通过今天这篇文章我将向大家展示一系列的命令.工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我. 1.命令行日常系快捷键 如下的快捷方式非常有用,能够 ...

  8. vue solt 属性浅析

    solt 也就是插槽,通俗的讲也是和div,span,p等类似的html标签,只是solt是子组件中的html标签.它显示不显示完全是由父组件决定的, 但是显示的位置是由子组件自己决定的.插槽主要分为 ...

  9. 01 of lenrning python

    我也打算开始写博客啦!记录一下自己的学习过程~ 01密文登陆 这个在vscode中不显示密文 在cmd中看不到密码 # -*- coding: utf-8 -*- import getpass nam ...

  10. ESP定律学习

    ESP = 堆栈平衡 ESP定理脱壳: (1)开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)(这只是一  般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值) ( ...