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

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

简述

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

 

 

 

以下是网页源码

 

 

 

以上是审查网页元素

 

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

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

实现思路:

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

以上部分过程文字解释:

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

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

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

 

#!/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/Anderson-An/p/10269750.html

你可能感兴趣的文章
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
使用 SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>