博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python网络爬虫抓取动态网页并将数据存入数据库MySQL
阅读量:4352 次
发布时间:2019-06-07

本文共 3676 字,大约阅读时间需要 12 分钟。

简述

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

这里写图片描述

这里写图片描述

以上是网页源码

这里写图片描述

这里写图片描述

以上是审查网页元素

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

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

实现思路:

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

以上部分过程文字解释:

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

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

  

正则表达式:

正则表达式的使用有两种思路,可以参考个人有关其简述: 

更多的细节介绍可以参考网上资料,搜索关键词: 正则表达式 python

json:

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

存储到数据库:

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

源码及注释

注意:使用python的版本是 2.7

 

#!/usr/bin/python#指明编码# -*- coding: UTF-8 -*- #导入python库import urllibimport urllib2import reimport MySQLdbimport json#定义爬虫类class crawl1:         def getHtml(self,url=None):        #代理        user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"        header={
"User-Agent":user_agent} request=urllib2.Request(url,headers=header) response=urllib2.urlopen(request) html=response.read() return html def getContent(self,html,reg): content=re.findall(html, reg, re.S) return content #连接数据库 mysql def connectDB(self): host="192.168.85.21" dbName="test1" user="root" password="123456" #此处添加charset='utf8'是为了在数据库中显示中文,此编码必须与数据库的编码一致 db=MySQLdb.connect(host,user,password,dbName,charset='utf8') return db cursorDB=db.cursor() return cursorDB #创建表,SQL语言。CREATE TABLE IF NOT EXISTS 表示:表createTableName不存在时就创建 def creatTable(self,createTableName): createTableSql="CREATE TABLE IF NOT EXISTS "+ createTableName+"(time VARCHAR(40),title VARCHAR(100),text VARCHAR(40),clicks VARCHAR(10))" DB_create=self.connectDB() cursor_create=DB_create.cursor() cursor_create.execute(createTableSql) DB_create.close() print 'creat table '+createTableName+' successfully' return createTableName #数据插入表中 def inserttable(self,insertTable,insertTime,insertTitle,insertText,insertClicks): insertContentSql="INSERT INTO "+insertTable+"(time,title,text,clicks)VALUES(%s,%s,%s,%s)"# insertContentSql="INSERT INTO "+insertTable+"(time,title,text,clicks)VALUES("+insertTime+" , "+insertTitle+" , "+insertText+" , "+insertClicks+")" DB_insert=self.connectDB() cursor_insert=DB_insert.cursor() cursor_insert.execute(insertContentSql,(insertTime,insertTitle,insertText,insertClicks)) DB_insert.commit() DB_insert.close() print 'inert contents to '+insertTable+' successfully' url="http://baoliao.hb.qq.com/api/report/NewIndexReportsList/cityid/18/num/20/pageno/1?callback=jQuery183019859437816181613_1440723895018&_=1440723895472"#正则表达式,获取js,时间,标题,文本内容,点击量(浏览次数)reg_jason=r'.*?jQuery.*?\((.*)\)'reg_time=r'.*?"create_time":"(.*?)"'reg_title=r'.*?"title":"(.*?)".*?'reg_text=r'.*?"content":"(.*?)".*?'reg_clicks=r'.*?"counter_clicks":"(.*?)"'#实例化crawl()对象crawl=crawl1()html=crawl.getHtml(url)html_jason=re.findall(reg_jason, html, re.S)html_need=json.loads(html_jason[0])print len(html_need)print len(html_need['data']['list'])table=crawl.creatTable('yh1')for i in range(len(html_need['data']['list'])): creatTime=html_need['data']['list'][i]['create_time'] title=html_need['data']['list'][i]['title'] content=html_need['data']['list'][i]['content'] clicks=html_need['data']['list'][i]['counter_clicks'] crawl.inserttable(table,creatTime,title,content,clicks)

 

转载于:https://www.cnblogs.com/xiaocongcong888/p/9360073.html

你可能感兴趣的文章
mysql的数据存储
查看>>
[转载] Activiti Tenant Id 字段释疑
查看>>
[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
查看>>
SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能
查看>>
最小权限的挑战
查看>>
jquery 视觉特效(水平滚动图片)
查看>>
SVG笔记
查看>>
linux下使用dd命令写入镜像文件到u盘
查看>>
001---进程
查看>>
视频人脸检测——OpenCV版(三)
查看>>
php获取来访者在搜索引擎搜索某个关键词,进入网站
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>
写一个欢迎页node统计接口Py脚本(邮件,附件)-py
查看>>
计算两个日期之间的天数
查看>>