简述
以下的代码是使用python实现的网络爬虫,抓取动态网页 http://hb.qq.com/baoliao/ 。此网页中的最新、精华下面的内容是由JavaScript动态生成的。审查网页元素与网页源码是不同。

以下是网页源码

以上是审查网页元素

所以此处不能简单的使用正则表达式来获取内容。

以下是完整的获取内容并存储到数据库的思路及源码。

实现思路:
抓取实际访问的动态页面的url – 使用正则表达式获取需要的内容 – 解析内容 – 存储内容

以上部分过程文字解释:

抓取实际访问的动态页面的url:

在火狐浏览器中,右键打开插件 使用**firebug审查元素** *(没有这项的,要安装firebug插件),找到并打开**网络(NET)**标签页。重新加载网页,获得网页的响应信息,包括连接地址。每个连接地址都可以在浏览器中打开。本网站的动态网页访问地址是:

  1. 在火狐浏览器中,右键打开插件 使用**firebug审查元素** *(没有这项的,要安装firebug插件),找到并打开**网络(NET)**标签页。重新加载网页,获得网页的响应信息,包括连接地址。每个连接地址都可以在浏览器中打开。本网站的动态网页访问地址是:
  2. http://baoliao.hb.qq.com/api/report/NewIndexReportsList/cityid/18/num/20/pageno/1?callback=jQuery183019859437816181613_1440723895018&_=1440723895472

正则表达式:

正则表达式的使用有两种思路,可以参考个人有关其简述:python实现简单爬虫以及正则表达式简述
更多的细节介绍可以参考网上资料,搜索关键词: 正则表达式 python

json:

参考网上有关json的介绍,搜索关键词: json python

存储到数据库:

参考网上的使用介绍,搜索关键词: 1,mysql 2,mysql python

源码及注释
注意:使用python的版本是 2.7

  1. #!/usr/bin/python
  2. #指明编码
  3. # -*- coding: UTF-8 -*-
  4.  
  5. #导入python库
  6. import urllib
  7. import urllib2
  8. import re
  9. import MySQLdb
  10. import json
  11.  
  12. #定义爬虫类
  13. class crawl1:
  14. def getHtml(self,url=None):
  15. #代理
  16. user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
  17. header={"User-Agent":user_agent}
  18. request=urllib2.Request(url,headers=header)
  19. response=urllib2.urlopen(request)
  20. html=response.read()
  21. return html
  22.  
  23. def getContent(self,html,reg):
  24. content=re.findall(html, reg, re.S)
  25. return content
  26.  
  27. #连接数据库 mysql
  28. def connectDB(self):
  29. host="192.168.85.21"
  30. dbName="test1"
  31. user="root"
  32. password=""
  33. #此处添加charset='utf8'是为了在数据库中显示中文,此编码必须与数据库的编码一致
  34. db=MySQLdb.connect(host,user,password,dbName,charset='utf8')
  35. return db
  36. cursorDB=db.cursor()
  37. return cursorDB
  38.  
  39. #创建表,SQL语言。CREATE TABLE IF NOT EXISTS 表示:表createTableName不存在时就创建
  40. def creatTable(self,createTableName):
  41. createTableSql="CREATE TABLE IF NOT EXISTS "+ createTableName+"(time VARCHAR(40),title VARCHAR(100),text VARCHAR(40),clicks VARCHAR(10))"
  42. DB_create=self.connectDB()
  43. cursor_create=DB_create.cursor()
  44. cursor_create.execute(createTableSql)
  45. DB_create.close()
  46. print 'creat table '+createTableName+' successfully'
  47. return createTableName
  48.  
  49. #数据插入表中
  50. def inserttable(self,insertTable,insertTime,insertTitle,insertText,insertClicks):
  51. insertContentSql="INSERT INTO "+insertTable+"(time,title,text,clicks)VALUES(%s,%s,%s,%s)"
  52. # insertContentSql="INSERT INTO "+insertTable+"(time,title,text,clicks)VALUES("+insertTime+" , "+insertTitle+" , "+insertText+" , "+insertClicks+")"
  53.  
  54. DB_insert=self.connectDB()
  55. cursor_insert=DB_insert.cursor()
  56. cursor_insert.execute(insertContentSql,(insertTime,insertTitle,insertText,insertClicks))
  57. DB_insert.commit()
  58. DB_insert.close()
  59. print 'inert contents to '+insertTable+' successfully'
  60.  
  61. url="http://baoliao.hb.qq.com/api/report/NewIndexReportsList/cityid/18/num/20/pageno/1?callback=jQuery183019859437816181613_1440723895018&_=1440723895472"
  62.  
  63. #正则表达式,获取js,时间,标题,文本内容,点击量(浏览次数)
  64. reg_jason=r'.*?jQuery.*?\((.*)\)'
  65. reg_time=r'.*?"create_time":"(.*?)"'
  66. reg_title=r'.*?"title":"(.*?)".*?'
  67. reg_text=r'.*?"content":"(.*?)".*?'
  68. reg_clicks=r'.*?"counter_clicks":"(.*?)"'
  69.  
  70. #实例化crawl()对象
  71. crawl=crawl1()
  72. html=crawl.getHtml(url)
  73. html_jason=re.findall(reg_jason, html, re.S)
  74.  
  75. html_need=json.loads(html_jason[0])
  76.  
  77. print len(html_need)
  78. print len(html_need['data']['list'])
  79.  
  80. table=crawl.creatTable('yh1')
  81. for i in range(len(html_need['data']['list'])):
  82. creatTime=html_need['data']['list'][i]['create_time']
  83. title=html_need['data']['list'][i]['title']
  84. content=html_need['data']['list'][i]['content']
  85. clicks=html_need['data']['list'][i]['counter_clicks']
  86. crawl.inserttable(table,creatTime,title,content,clicks)

python网络爬虫抓取动态网页并将数据存入数据库MySQL的更多相关文章

  1. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  2. 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

    前几天给大家分享了利用Python网络爬虫抓取微信朋友圈的动态(上)和利用Python网络爬虫爬取微信朋友圈动态——附代码(下),并且对抓取到的数据进行了Python词云和wordart可视化,感兴趣 ...

  3. 利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  4. 利用Python网络爬虫抓取微信好友的所在省位和城市分布及其可视化

    前几天给大家分享了如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,感兴趣的小伙伴可以点击链接进行查看.今天小编给大家介绍如何利用Python网络爬虫抓取微信好友的省位和城市,并且将 ...

  5. python网络爬虫抓取网站图片

    本文介绍两种爬取方式: 1.正则表达式 2.bs4解析Html 以下为正则表达式爬虫,面向对象封装后的代码如下: import urllib.request # 用于下载图片 import os im ...

  6. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  7. 【转】详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)

    转自:http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_ ...

  8. selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

  9. scrapy和selenium结合抓取动态网页

    1.安装python (我用的是2.7版本的) 2.安装scrapy:   详情请参考 http://blog.csdn.net/wukaibo1986/article/details/8167590 ...

随机推荐

  1. Windows平台下搭建自己的Git服务器

    该文章转自:http://www.codeceo.com/article/windows-git-server.html Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库,相 ...

  2. vue教程1-08 交互 get、post、jsonp

    vue教程1-08 交互 get.post.jsonp 一.如果vue想做交互,引入: vue-resouce 二.get方式 1.get获取一个普通文本数据: <!DOCTYPE html&g ...

  3. Android 9 新功能 及 API 介绍(提供了实用的模块化的功能支持,包括 人工智能)

      Android 9(API 级别 28)为用户和开发者引入了众多新特性和新功能. 本文重点介绍面向开发者的新功能. 要了解新 API,请阅读 API 差异报告或访问 Android API 参考. ...

  4. android 回调函数使用简介

    //1---定义回调函数 public interface GirdMenuStateListener { void onSuccess(); void onError(); } //2---使用的地 ...

  5. PHP使用APC获取上传文件进度

    今天发现使用PHP的APC也能获取上传文件的进度.这篇文章就说下如何做. 安装APC 首先安装APC的方法和其他PHP模块的方法没什么两样,网上能找出好多 phpinfo可以看到APC的默认配置有: ...

  6. C# 多线程七之Parallel

    1.简介 关于Parallel不想说太多,因为它是Task的语法糖,至少我是这么理解的,官方文档也是这么说的,它本身就是基本Task的.假设我们有一个集合,不管是什么集合,我们要遍历它,首先想到的是F ...

  7. url最后的“/”是什么作用

    多了个尾巴 有时候,当你尝试在地址栏输入https://123/demo的时候,会发现浏览器会重定向到https://123/demo/这个地址,也就是多了个/,发生了重定向.有图为证: 上面这个图是 ...

  8. Shell脚本 | 性能测试之启动流量

    安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...

  9. scala-03-list操作

    列表 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是.. 1, 创建 lis ...

  10. 24-hadoop-hiveserver2&jdbc-正则数据导入

    hive 可以 类似jdbc链接, 但启动的必须是hiveserver2, 才可以使用 hiveserver2 默认监听 10000 端口 1, 启动: nohup $HIVE_HOME/bin/hi ...