DataURIscheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。
比如上面那串字符,其实是一张小,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1X36的白灰png。
在上面的DataURI中,data表示取得数据的协定名称。
#!/usr/bin/env python
# coding:utf-8
from bs4 import BeautifulSoup
#这个data 可以替换成你的 div=soupfind_all('div',class_="star")
#取的时候 记得循环处理
data = '''
<div>
<span class='a' protype='d'>1</span>
<span class='a' protype='d'>2</span>
<span class='a' protype='d'>3</span>
<span class='a' protype='d'>4</span>
</div>
'''
soup = BeautifulSoup(data, 'lxml')
spans = soupfind_all('span')
span_content=[]
for i in spans:
print i ,itext #这里取标签span的内容
span_contentappend(itext)
print span_content
------------------------
<span class="a" protype="d">1</span> 1
<span class="a" protype="d">2</span> 2
<span class="a" protype="d">3</span> 3
<span class="a" protype="d">4</span> 4
[u'1', u'2', u'3', u'4']
一、首先理解下面几个函数
设置变量 length()函数 char_length() replace() 函数 max() 函数
11、设置变量 set @变量名=值
set @address='中国-山东省-聊城市-莘县';select @address
12 、length()函数 char_length()函数区别
select length('a')
,char_length('a')
,length('中')
,char_length('中')
13、 replace() 函数 和length()函数组合
set @address='中国-山东省-聊城市-莘县';select @address
,replace(@address,'-','') as address_1
,length(@address) as len_add1
,length(replace(@address,'-','')) as len_add2
,length(@address)-length(replace(@address,'-','')) as _count
etl清洗字段时候有明显分割符的如何确定新的数据表增加几个分割出的字段
计算出com_industry中最多有几个 - 符 以便确定增加几个字段 最大值+1 为可以拆分成的字段数 此表为3 因此可以拆分出4个行业字段 也就是4个行业等级
select max(length(com_industry)-length(replace(com_industry,'-',''))) as _max_count
from etl1_socom_data
14、设置变量 substring_index()字符串截取函数用法
set @address='中国-山东省-聊城市-莘县';
select
substring_index(@address,'-',1) as china,
substring_index(substring_index(@address,'-',2),'-',-1) as province,
substring_index(substring_index(@address,'-',3),'-',-1) as city,
substring_index(@address,'-',-1) as district
15、条件判断函数 case when
case when then when then else 值 end as 字段名
select case when 89>101 then '大于' else '小于' end as betl1_socom_data
二、kettle转换etl1清洗
首先建表 步骤在视频里
字段索引 没有提 索引算法建议用BTREE算法增强查询效率
21kettle文件名:trans_etl1_socom_data
22包括控件:表输入>>>表输出
23数据流方向:s_socom_data>>>>etl1_socom_data
kettle转换1截图
24、表输入24、SQL脚本 初步清洗com_district和com_industry字段
select a,case when com_district like '%业' or com_district like '%织' or com_district like '%育' then null else com_district end as com_district1
,case when com_district like '%业' or com_district like '%织' or com_district like '%育' then concat(com_district,'-',com_industry) else com_industry end as com_industry_total
,replace(com_addr,'地 址:','') as com_addr1
,replace(com_phone,'电 话:','') as com_phone1
,replace(com_fax,'传 真:','') as com_fax1
,replace(com_mobile,'手机:','') as com_mobile1
,replace(com_url,'网址:','') as com_url1
,replace(com_email,'邮箱:','') as com_email1
,replace(com_contactor,'联系人:','') as com_contactor1
,replace(com_emploies_nums,'公司人数:','') as com_emploies_nums1
,replace(com_reg_capital,'注册资金:万','') as com_reg_capital1
,replace(com_type,'经济类型:','') as com_type1
,replace(com_product,'公司产品:','') as com_product1
,replace(com_desc,'公司简介:','') as com_desc1from s_socom_data as a
25、表输出
表输出设置注意事项
注意事项:
① 涉及爬虫增量 *** 作 不要勾选裁剪表选项
②数据连接问题 选择表输出中表所在的数据库
③字段映射问题 确保数据流中的字段和物理表的字段数量一致 对应一致
三、kettle转换etl2清洗
首先建表增加了4个字段 演示步骤在视频里
字段索引 没有提 索引算法建议用BTREE算法增强查询效率
主要针对etl1 生成的新的com_industry进行字段拆分 清洗
31kettle文件名:trans_etl2_socom_data
32包括控件:表输入>>>表输出
33数据流方向:etl1_socom_data>>>>etl2_socom_data
注意事项:
① 涉及爬虫增量 *** 作 不要勾选裁剪表选项
②数据连接问题 选择表输出中表所在的数据库
③字段映射问题 确保数据流中的字段和物理表的字段数量一致 对应一致
kettle转换2截图
34、SQL脚本 对com_industry进行拆分 完成所有字段清洗 注册资金字段时间关系没有进行细致拆解 调整代码即可
select a,case
#行业为''的值 置为空when length(com_industry)=0 then null
#其他的取第一个-分隔符之前else substring_index(com_industry,'-',1) end as com_industry1,case
when length(com_industry)-length(replace(com_industry,'-',''))=0 then null
#'交通运输、仓储和邮政业-' 这种值 行业2 也置为nullwhen length(com_industry)-length(replace(com_industry,'-',''))=1 and length(substring_index(com_industry,'-',-1))=0 then nullwhen length(com_industry)-length(replace(com_industry,'-',''))=1 then substring_index(com_industry,'-',-1)else substring_index(substring_index(com_industry,'-',2),'-',-1)end as com_industry2,case
when length(com_industry)-length(replace(com_industry,'-',''))<=1 then nullwhen length(com_industry)-length(replace(com_industry,'-',''))=2 then substring_index(com_industry,'-',-1)else substring_index(substring_index(com_industry,'-',3),'-',-1)end as com_industry3,case
when length(com_industry)-length(replace(com_industry,'-',''))<=2 then nullelse substring_index(com_industry,'-',-1)end as com_industry4from etl1_socom_data as a
四、清洗效果质量检查
41爬虫数据源数据和网站数据是否相符
如果本身工作是爬虫和数据处理在一起处理,抓取的时候其实已经判断,此步骤可以省略,如果对接上游爬虫同事,这一步首先判断,不然清洗也是无用功,一般都要求爬虫同事存储请求的url便于后面数据处理查看数据质量
42计算爬虫数据源和各etl清洗数据表数据量
注:SQL脚本中没有经过聚合过滤 3个表数据量应相等
421、sql查询 下面表我是在同一数据库中 如果不在同一数据库 from 后面应加上表所在的数据库名称
不推荐数据量大的时候使用
select count(1) from s_socom_dataunion all
select count(1) from etl1_socom_dataunion all
select count(1) from etl2_socom_data
422 根据 kettle转换执行完毕以后 表输出总量对比
kettle表输出总数据量
43查看etl清洗质量
确保前两个步骤已经无误,数据处理负责的etl清洗工作自查开始 针对数据源清洗的字段 写脚本检查 socom网站主要是对地区 和行业进行了清洗 对其他字段做了替换多余字段处理 ,因此采取脚本检查,
找到page_url和网站数据进行核查
where里面这样写便于查看某个字段的清洗情况
select
from etl2_socom_data
where com_district is null and length(com_industry)-length(replace(com_industry,'-',''))=3
此页面数据和etl2_socom_data表最终清洗数据对比
网站页面数据
etl2_socom_data表数据
清洗工作完成。
验证码(CAPTCHA)全称为全自动区分计算机和人类的公开图灵测试(Completely Automated Public Turing test to tell Computersand Humans Apart)。从其全称可以看出,验证码用于测试用户是真实的人类还是计算机机器人。
1获得验证码
每次加载注册网页都会显示不同的验证验图像,为了了解表单需要哪些参数,我们可以复用上一章编写的parse_form()函数。
>>> import cookielib,urllib2,pprint>>> import form>>> REGISTER_URL = '>
以上就是关于datauri scheme怎么爬取全部的内容,包括:datauri scheme怎么爬取、python爬虫,用find_all()找到某一标签后,怎么获取下面数个同名子标签的内容、Python爬虫数据应该怎么处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)