抓取动态网页(一下动态网站快讯 )

优采云 发布时间: 2021-09-27 20:03

  抓取动态网页(一下动态网站快讯

)

  今天研究了一下动态网站的爬取,以及这里使用的世轩股票宝网站:

  这个小案例简单抓取了轩宝的7x24时事通讯的信息内容,并将数据保存在Mysql数据库中。

  网页分为静态网页和动态网页。静态网页一般是指不与嵌入在页面或js中的后端数据交互的网页,而动态网页通过Ajax与数据库交互,可以实时从数据库中获取数据并显示在页面上.

  如何判断一个网站是动态的网站:

  1. 浏览网页时,部分网站可以在翻页的同时不断向下滚动和加载数据。这通常是动态的网站。

  2. 也可以在网络上查看XHR,在浏览器控制台查看和后台数据交互记录。

  

  首先,我们必须找到数据源。经过观察,我们发现时事通讯是由上图中名为newsflash的请求加载的。通过这个请求,我们可以得到他的url,10,723,35,469,821&platform=pcweb。通过观察这个请求,我们可以找到newsflashlimit参数控制请求。返回的记录数,游标是毫秒时间戳,因为这里的咨询内容是动态更新的,每隔一段时间就会加载新的咨询,这里是按时间排序的,所以只要控制这两个参数就可以得到咨询你想要的内容。

  这里我尝试抓取一个时间段内的咨询内容,时间间隔设置为10分钟。也就是说,每次咨询内容在10分钟内生成,当然可能会有重复,这里就不做处理了。

  用于时间戳和时间转换的在线工具:

  代码显示如下

  #!/usr/bin/env python

  # -*- 编码:utf-8 -*-

  # @File: 蜘蛛侠.py

  # @Author: 小橙

  # @日期:2019-1-6

  # @Desc :Dynamic 网站 抓取选择共享

  *敏*感*词*请求

  从 fake_useragent 导入 UserAgent

  从 sqlalchemy 导入 create_engine

  将熊猫导入为 pd

  导入时间

  #时间:1月7日12:00-17:00

  #对应时间戳:00-00

  #发送请求获取返回数据

  定义获取数据(网址):

  如果 url 为 None:

  返回

  ua = 用户代理()

  headers = {'User-Agnet':ua.random}

  r = requests.get(url,headers=headers)

  如果 r.status_code == 200:

  #如果请求返回的是json格式的数据,可以使用json()函数

  #也可以使用json.load()函数将json格式的字符串转换成json对象

  返回 r.json()

  #提取返回数据中的字段信息

  定义解析器数据(数据):

  #提取数据中的id、title、汇总字段信息

  retdata = data.get('数据')

  msglist = retdata.get('消息')

  保存列表 = []

  对于 msglist 中的 msg:

  id = int(msg.get('id'))

  title = msg.get('title')

  总结 =''

  #summary中的字段为空时,将title的值赋给summary

  如果 msg.get('summary') !='':

  summary = msg.get('summary').replace('\n','')#去掉摘要中的换行符

  别的:

  摘要 = 标题

  温度 = []

  temp.append(id)

  temp.append(标题)

  temp.append(总结)

  savelist.append(temp)

  返回保存列表

  #保存数据到数据库

  def saveData(result_data,con):

  #向数据库写入数据

  如果 len(result_data)>0:

  #这里创建DataFrame的时候忘记加header了,写数据的时候一直报错

  df = pd.DataFrame(result_data,columns=['id','title','summary'])

  # 打印('df:',df)

  #如果要自动建表,用replace替换if_exists的值,建议自己建表,if_exists的值是append

  #name是表名,con是数据库连接

  df.to_sql(name="stock_news", con=con, if_exists='append', index=False)

  # print('数据保存成功!')

  #获取数据库连接

  def getContact():

  #连接数据库

  engine = create_engine('mysql+pymysql://root:123456@loc​​alhost:3306/demo01?charset=utf8')

  con = engine.connect()

  print('Mysql 连接创建成功...')

  返回引擎

  如果 __name__ =='__main__':

  url =';cursor={}&subj_ids=9,10,723,35,469,821&platform=pcweb'

  开始时间 = 00

  con = getContact() #创建数据库连接

  计数 = 0

  为真:

  #这里设置的时间间隔是10分钟,意思是每次取消息10分钟内更新

  结束时间 = 开始时间 + 600000

  如果 end_time>00:

  休息

  开始时间 = 结束时间

  now_url = url.format(end_time)

  数据 = 获取数据(now_url)

  time.sleep(2) #每2秒请求一次

  result_data = parserData(data)

  # 打印(结果数据)

  保存数据(result_data,con)

  计数 += len(result_data)

  print('{} 数据保存成功!'.format(count))

  两小时的测试更新

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线