python网络爬虫抓取动态网页并将数据存入数据库MySQL

栏目: 编程工具 · 发布时间: 7年前

内容简介:以下的代码是使用python实现的网络爬虫,抓取动态网页

简述

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

python网络爬虫抓取动态网页并将数据存入数据库MySQL

python网络爬虫抓取动态网页并将数据存入数据库MySQL

以上是网页源码

python网络爬虫抓取动态网页并将数据存入数据库MySQL

python网络爬虫抓取动态网页并将数据存入数据库MySQL

以上是审查网页元素

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

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

实现思路:

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

以上部分过程文字解释:

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

在火狐浏览器中,右键打开插件 使用**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 urllib
import urllib2
import re
import MySQLdb
import 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) 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spark SQL内核剖析

Spark SQL内核剖析

朱锋、张韶全、黄明 / 电子工业出版社 / 2018-8 / 69.00元

Spark SQL 是 Spark 技术体系中较有影响力的应用(Killer application),也是 SQL-on-Hadoop 解决方案 中举足轻重的产品。《Spark SQL内核剖析》由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现机制,以及在实际业务场 景中的开发实践,其中包括 SQL 编译实现、逻辑计划的生成与优化、物理计划的生成与优化、Aggregation 算......一起来看看 《Spark SQL内核剖析》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具