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

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

时间:2024-08-10 14:23:54浏览次数:17  
标签:title Python 爬虫 reg python html MySQL need clicks

在这里插入图片描述

简述

以下的代码是使用python实现的网络爬虫,抓取动态网页 http://hb.qq.com/baoliao/ 。此网页中的最新、精华下面的内容是由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实现简单爬虫以及正则表达式简述
更多的细节介绍可以参考网上资料,搜索关键词: 正则表达式 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) 

最后这里给大家免费分享一份Python学习资料,包含了视频、源码、课件,希望能够帮助到那些不满现状,想提示自己却又没用方向的朋友,也可以和我一起来交流呀!

编辑资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
在这里插入图片描述
在这里插入图片描述

标签:title,Python,爬虫,reg,python,html,MySQL,need,clicks
From: https://blog.csdn.net/Python_trys/article/details/141090337

相关文章

  • Python 爬虫项目实战(七):制作视频下载软件
    前言网络爬虫(WebCrawler),也称为网页蜘蛛(WebSpider)或网页机器人(WebBot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓取等。爬虫的基本原理种子URL:爬虫从一个或多个种子URL开始,这些URL是起点。发送请求:爬虫向这些种......
  • Python 爬虫项目实战(六):爬取大众点评商家数据
    前言网络爬虫(WebCrawler),也称为网页蜘蛛(WebSpider)或网页机器人(WebBot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓取等。爬虫的基本原理种子URL:爬虫从一个或多个种子URL开始,这些URL是起点。发送请求:爬虫向这些种......
  • 【解决】Python运行中卡住不动-深度解析
    【解决】Python运行中卡住不动-深度解析在Python编程的广阔世界里,遇到程序运行中突然卡住不动的情况并不罕见。这种情况可能源于多种原因,从简单的代码逻辑错误到复杂的系统资源问题。本文将深入探讨Python程序卡住不动的现象,分析其可能的原因,并提供实用的解决思路和......
  • Python官网下载速度超慢:深度解析
    Python官网下载速度超慢:深度解析解决思路1.检查网络连接首先,确保你的网络连接是稳定的,并且没有其他设备或程序占用大量带宽。2.选择合适的下载节点Python官网可能提供了多个镜像站点或下载链接,尝试选择距离你地理位置较近的镜像站点进行下......
  • MySQL教程
    1、初识MySQL#JavaEE:企业级Java开发Web前端(页面:展示,数据!)后台(连接点:连接数据库JDBC,连接前端(控制,控制视图跳转,给前端传递数据))数据库(存数据,Txt,Excle,word)学好数据库:操作系统,数据结构与算法。离散数学,数字电路,体系结构,编译原理。1.1什么是数据库#数据库(DB,DataBase)概念:数......
  • MySQL——添加数据(一)为表中所有字段添加数据
            要想操作数据表中的数据,首先要保证数据表中存在数据。MySQL使用INSERT语句向数据表中添加数据,并且根据添加方式的不同分为三种,分别是为表的所有字段添加数据、为表的指定字段添加数据、同时添加多条记录。    通常情况下,向数据表中添加的新记录应该......
  • MySQL——添加数据(二)为表的指定字段添加数据
            为表的指定字段添加数据,就是在INSERT语句中只向部分字段中添加,而其他字段的值为表定义时的默认值。为表的指定字段添加数据的基本语法格式如下所示:INSERTINTO表名(字段1,字段2..)VALUES(值1,值2..)        在上述语法格式中,“字段1......
  • 爬爬虫码子python
    今天学完了爬虫呦代码如下: importrequests#要爬取的网址url=''#=======发送请求获取响应=======r=requests.get(url=url)#=======打印状态码=======print('状态码:',r.status_code)#=======打印响应内容=======print('响应内容字符串:',r.te......
  • 深入理解Python的模块和包
    目录模块简介创建和使用模块定义模块导入模块模块的搜索路径使用内置模块包简介创建和使用包定义包导入包相对导入和绝对导入模块和包的高级特性模块的重新加载模块的私有属性和函数包的动态导入实际项目中的应用项目结构设计模块化代码的好处总结模块简介在Pyth......
  • MySQL--读写分离与分布式存储
    前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除一、读写分离1、什么是读写分离在数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将数据变更同......