动态网页抓取(动态网页元素与网页源码的实现思路及源码 )

优采云 发布时间: 2021-10-10 04:03

  动态网页抓取(动态网页元素与网页源码的实现思路及源码

)

  简单的介绍

  以下代码是一个使用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实现和正则表达式的简单介绍

  详细请参考网上资料,搜索关键词:正则表达式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)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线