本帖最后由 crazydingo 于 2021-12-23 13:41 编辑
时隔这么久了,才来了。因为有朋友总要咨询我,希望我打包处理下。不打包也是为了让大家用起来方便些,既然有人要。我就打包了一份。
供你们使用吧。
https://crazydingo.lanzoul.com/i5Mfdxw8coj
-------------------------------------------------------------因为工作关系需要对检测标准进行查新。标准数量很多,大概1200本,而且要求是按季度查新,如果人工查,太耗费时间和精力了。所以想着就用python来试试了。
找了很多网站,现在很多网站都做了发爬虫,或者做了ip访问限制。“著名”的工标网,限制一个ip每天只能访问200个页面。
找到一个网站,本来原来是准备用webbrower方式来解析。后来分析一下网站是用json显示数据的。然后就对其进行了解析。
打开网页后,点击F12,看下里面的XHR里面的内容。看到里面一堆东西。点击进去就可以看到我需要查的内容了。
最后查看里面的内容,看到抓取的URL和相关参数。这就可以抓取了。
分析里面的数据,找到需要的内容就行。
然后因为标准数量多,我用的是excel 导入,最后查询结果导入到excel里面。
[Python] 纯文本查看 复制代码 #coding: utf-8
import requests
import json
import xlrd
from xlrd import xldate_as_tuple
import xlwt
import time
std_file='std_check.xlsx'
std_check_re = xlwt.Workbook()
sheet2= std_check_re.add_sheet('结果',cell_overwrite_ok=True)
def check_excel():
wb=xlrd.open_workbook(filename=std_file)
print(wb.sheet_names())
sheet1=wb.sheet_by_index(0)
print(sheet1)
print(sheet1.nrows)
sheet2.col(0).width=256*20 #设置列宽
sheet2.col(1).width = 256 * 40
sheet2.col(2).width = 256 * 40
sheet2.col(3).width = 256 * 10
sheet2.col(4).width = 256 * 20
sheet2.col(5).width = 256 * 20
sheet2.col(6).width = 256 * 40
sheet2.write(0,0,'标准代号') # 设置表头名字
sheet2.write(0,1,'标准中文名')
sheet2.write(0,2,'标准英文名')
sheet2.write(0, 3, '标准状态')
sheet2.write(0, 4, '实施时间')
sheet2.write(0, 5, '废止时间')
sheet2.write(0, 6, '发布公告')
for i in range(1,sheet1.nrows):
time.sleep(3)
check_std=sheet1.row_values(i)
sheet2.write(i,0,check_std)
sheet2.write(i,1,check_std)
print(i,'Now is checking ',check_std)
url = 'http://www.njbz365.com/njbzb/shopCartManage/getStanDetailInfo1.do'
data = {"id": 2427529,
"stanNum": check_std,
}
wbdata = requests.post(url, data=data).json()
sheet2.write(i, 0, check_std)
sheet2.write(i, 1, wbdata['content']['map']['SN_CHN'])
sheet2.write(i, 2, wbdata['content']['map']['SN_EN'])
sheet2.write(i, 3, wbdata['content']['map']['SN_STATE'])
sheet2.write(i, 4, wbdata['content']['map']['CARRY_OUT_DATE'])
sheet2.write(i, 5, wbdata['content']['map']['ABOLISH_DATE'])
sheet2.write(i, 6, wbdata['content']['map']['stanRel'])
std_check_re.save('check_result.xls')
#print(wbdata)
#print(wbdata['content']['map']['SN_CHN']) #中文名
#print(wbdata['content']['map']['SN_EN']) #英文名
#print(wbdata['content']['map']['CARRY_OUT_DATE']) #实施时间
#print(wbdata['content']['map']['SN_STATE']) #状态
#print(wbdata['content']['map']['stanRel']) #发布公告
#print(wbdata['content']['map']['ABOLISH_DATE']) #作废时间
check_excel()
附上源代码。
附件是源代码和相应的excel格式。
我用的是pycharm环境开发的。
在吾爱混了几年了,这是第一次发帖,还请大家多多指导,不吝赐教。
请大家觉得有帮助得话,麻烦点点免费评分。谢谢
std-check.rar
(7.58 KB, 下载次数: 203)
|