爬虫用于从网上得到目标数据,根据需要对其予以利用,加以分析,得到想要的实验成果。现在讲一讲我这两天学到的东西。

第一,爬虫的算法结构,包括以下几个方面:

(1)读取网络数据

(2)将获取的数据解析为目标格式,进而筛选出想要的数据

(3)将有用数据存于本地数据库中

第二,具体实施方案

(1)读取网络数据,需要用到urllib和urllib2两个库,和需要爬取数据的资源定位符URL。

通过url,将网页所有数据
1 request = urllib2.request(url)
response = urllib2.response(request)
html = response.read()
关于url的动态变化
1 url="http://wsbs.bjepb.gov.cn/air2008/Air1.aspx?time="
i=0
for tim in range(1364774400,1365206400,86400):
i=i+1
if(i%180==0):
time.sleep(15)
ltime=time.localtime(tim)
timeStr=time.strftime("%Y-%m-%d", ltime)
url="http://wsbs.bjepb.gov.cn/air2008/Air1.aspx?time="
url=url+timeStr
print url

(2)利用BeautifulSoup将获取的数据解析为目标格式,进而筛选出想要的数据

 soup = BeautifulSoup(html,"html.parser")
trs = soup.find("table",id="DaliyReportControl1_DataGridDataDic")
length = len(trs.contents)

(3)利用Access,分三步:建立数据库连接 --> 打开一张表 --> 存储数据

 import win32com.client
##建立数据库连接
conn = win32com.client.Dispatch(r'ADODB.Connection')
DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:/test.mdb;'
conn.Open(DSN)
##打开一个记录集
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'aircondition'#表名
rs.Open('[' + rs_name + ']', conn, 1, 3)
print rs.RecordCount
*************
conn.Close()
 for x in range(2,length-1):
if(len(trs.contents[x].contents)==8):
rs.AddNew()
rs.Fields('Station').Value=trs.contents[x].contents[2].string
rs.Fields('AQI').Value=trs.contents[x].contents[3].string
rs.Fields('Pollutants').Value=trs.contents[x].contents[4].string
rs.Fields('Grade').Value=trs.contents[x].contents[5].string
rs.Fields('Air_quality').Value=trs.contents[x].contents[6].string
rs.Fields('updatedate').Value=timeStr
rs.Update()
## print str(x) + "***********8"
## print trs.contents[x].contents[0].string + "," + trs.contents[x].contents[1].string + "," + trs.contents[x].contents[2].string + "," + trs.contents[x].contents[3].string + "," + trs.contents[x].contents[4].string + "," + trs.contents[x].contents[5].string + "," + trs.contents[x].contents[6].string + "," + trs.contents[x].contents[7].string
elif(len(trs.contents[x].contents)==7):
rs.AddNew()
rs.Fields('Station').Value=trs.contents[x].contents[1].string
rs.Fields('AQI').Value=trs.contents[x].contents[2].string
rs.Fields('Pollutants').Value=trs.contents[x].contents[3].string
rs.Fields('Grade').Value=trs.contents[x].contents[4].string
rs.Fields('Air_quality').Value=trs.contents[x].contents[5].string
rs.Fields('updatedate').Value=timeStr
rs.Update()
## print str(x) + "*******" + "7"
## print trs.contents[x].contents[0].string + "," + trs.contents[x].contents[1].string +"," + trs.contents[x].contents[2].string + "," + trs.contents[x].contents[3].string + "," + trs.contents[x].contents[4].string + "," + trs.contents[x].contents[5].string + "," + trs.contents[x].contents[6].string
print "**************"+str(i)+"***********" + str(timeStr)+"**************"

时间关系,并没有很仔细的归纳。以后有机会再整理吧。

最新文章

  1. 组件化h5活动模板的实现
  2. (原创)VM中的CentOS6.4中安装CloudStack6.3①
  3. 【转载】ANSYS 动力分析 (9) - 瞬态动力分析 (1)
  4. c#使用DocX给word添加目录TOC
  5. 浅谈Objective—C中的面向对象特性
  6. python推荐淘宝物美价廉商品 2.0
  7. nodejs中的 Cannot read property'text' of undefined 问题
  8. Coursera无法正常提交作业
  9. Android Metro风格的Launcher开发系列第三篇
  10. IOS开发之--iPhone XR,iPhone XS Max适配
  11. jq时间戳动画
  12. python带参装饰器的改良版
  13. dubbo+maven多模块项目单元测试
  14. CSS里有哪些常见的块级元素和行内元素以及其区别?
  15. 【CF613D】Kingdom and its Cities
  16. 【APUE】Chapter16 Network IPC: Sockets & makefile写法学习
  17. 关于 WizTools.org RESTClient的使用
  18. MySQL中大于等于小于等于的写法
  19. ICPC World Finals 2018 Problem H Single Cut of Failure
  20. High waits on control file sequential read

热门文章

  1. C# 工厂模式+虚方法(接口、抽象方法)实现多态
  2. git提交项目到已存在的远程分支
  3. Ubuntu设置root用户登录图形界面
  4. OpenGL ES 3.0: 图元重启(Primitive restart)
  5. .JavaWeb文件上传和FileUpload组件使用
  6. Vue.js——60分钟组件快速入门(上篇)
  7. Xamarin.Android多界面
  8. [NodeJS] Hello World 起步教程
  9. ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理
  10. Linux网络编程系列-常见疑惑