python抓取动态网页(Python爬虫之爬取各大币交易网站公告(二) )

优采云 发布时间: 2021-09-16 14:03

  python抓取动态网页(Python爬虫之爬取各大币交易网站公告(二)

)

  Python爬虫爬行动态网站-爬行每个主要货币交易网站公告(二))@

  我们经常发现网页中的许多数据不是用HTML编写的,而是通过JS动态加载的。因此,我们提出了动态数据的概念。动态数据是指网页中由JavaScript动态生成的页面内容,该内容是在页面加载到浏览器后动态生成的,而不是在加载之前

  在编写爬虫程序获取网页数据时,我们经常会遇到这种需要动态加载数据的HTML网页。如果我们仍然直接从网页上获取数据,我们将无法获得任何数据

  今天,让我们来讨论如何使用Python对动态网站进行爬网@

  Python版本:Python3.X

  运行平台:Windows

  IDE:PyCharm

  浏览器:Chrome

  网站:、coinex等。例如

  (一)analysis网站)@

  查看网页源代码,如下图所示。我们无法在HTML中找到相应的公告信息:

  

  在Chrome浏览器中,单击F12在网络中打开XHR。抓取对应的JS文件进行解析,如下图所示:

  

  按F5刷新,出现如下界面:

  

  公告显然与我们想要的有关。单击以获取:

  

  显然,我们想要的是正确的。我们将在下面获得这些信息。单击标题:

  

  我们得到请求头和请求参数

  (二)@通过请求模块发送post请求

  headers = {

'User - Agent': 'Mozilla / 5.0(Linux;Android6.0;Nexus5Build / MRA58N) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 67.0.3396.62MobileSafari / 537.36',

'Cookie': 'SESSION= 6b464d53 - 0609 - 4165 - 936a - a05755e6aa50;__jsluid = 2116ec5d7ed6479ffcc767fe36fcc671;Hm_lvt_0c4a3a6d4432aa88adff38d3193396ce = 1538189398;_uab_collina = 153818939825788460139305;__jsl_clearance = 1538189703.864 | 0 | UEnHiXDEq4kQ805BL4iBLIKbm % 2Fc % 3D;Hm_lpvt_0c4a3a6d4432aa88adff38d3193396ce = 1538189712',

'Referer': 'https: // www.cointiger.pro /'

}

data = {

'page': '1',

'pageSize': '20'

}

  (三)extract-information)

  单击“预览”,我们将获得:

  

  我们找到了我们想要的信息——时间、头衔和*敏*感*词*

  当你看到一个ID时,你可能想知道为什么你想要一个ID

  让我们看看其中的一些文章

  

  

  比较ID后,我们会发现每个公告的链接实际上是'

  提取方法说明如下:

  title = html_doc.get('data').get('noticeInfoList')[n].get('title')

  另外两种提取方法相同

  此外,这里的时间是一个时间戳,我们需要将其转换为本地时间

  timestamp = html_doc.get('data').get('noticeInfoList')[n].get('ctime') / 1000 #/1000是因为时间戳一般为10位

timeArray = time.localtime(timestamp)

now_time = time.strftime("%Y-%m-%d-%H:%M:%S", timeArray)

  (四)在当地时间前一天收到公告)

  与静态一样,我们首先得到当地时间的前一天:

  now_time = datetime.datetime.now()

yes_time = now_time + datetime.timedelta(days=-1)

yes_time_nyr = yes_time.strftime('%Y-%m-%d')

  然后根据if语句进行判断

  (五)总代码)

  import requests

import json

import time

import datetime

if __name__=='__main__':

now_time = datetime.datetime.now()

yes_time = now_time + datetime.timedelta(days=-1)

yes_time_nyr = yes_time.strftime('%Y-%m-%d')

headers = {

'User - Agent': 'Mozilla / 5.0(Linux;Android6.0;Nexus5Build / MRA58N) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 67.0.3396.62MobileSafari / 537.36',

'Cookie': 'SESSION= 6b464d53 - 0609 - 4165 - 936a - a05755e6aa50;__jsluid = 2116ec5d7ed6479ffcc767fe36fcc671;Hm_lvt_0c4a3a6d4432aa88adff38d3193396ce = 1538189398;_uab_collina = 153818939825788460139305;__jsl_clearance = 1538189703.864 | 0 | UEnHiXDEq4kQ805BL4iBLIKbm % 2Fc % 3D;Hm_lpvt_0c4a3a6d4432aa88adff38d3193396ce = 1538189712',

'Referer': 'https: // www.cointiger.pro /'

}

data = {

'page': '1',

'pageSize': '20'

}

target = 'https://www.cointiger.pro/exchange/internal/sperate/public/notices?page=1&pageSize=20' #此为Request URL

req = requests.get(url=target, headers=headers, data=data)

html = req.text

html_doc = json.loads(html) #json.loads()解码python json格式

num = len(html_doc.get('data').get('noticeInfoList'))

n = 0

judge = []

while (n < num):

title = html_doc.get(&#39;data&#39;).get(&#39;noticeInfoList&#39;)[n].get(&#39;title&#39;)

timestamp = html_doc.get(&#39;data&#39;).get(&#39;noticeInfoList&#39;)[n].get(&#39;ctime&#39;) / 1000

timeArray = time.localtime(timestamp)

now_time = time.strftime("%Y-%m-%d-%H:%M:%S", timeArray)

id = html_doc.get(&#39;data&#39;).get(&#39;noticeInfoList&#39;)[n].get(&#39;id&#39;)

href = &#39;https://www.cointiger.pro/#/notice_detail/%s&#39; % id

all = now_time + &#39;\t&#39; + title + &#39;\t&#39; + href

n = n + 1

if yes_time_nyr in all:

print(all)

judge += all

if len(judge) == 0:

print(&#39;本日无公告&#39;)

  (注)

  通过requests.post()发出post请求时,传入消息有两个参数,一个是data,另一个是JSON

  普通表单表单可以直接使用数据参数提交消息,数据对象是Python中的字典类型,在最新的爬虫过程中遇到一条负载消息,是JSON格式的消息,所以传入的消息对象也应该是格式的,这里有两种提交消息的方法:

  import requests

import json

url = "http://example.com"

data = { &#39;a&#39;: 1,

&#39;b&#39;: 2,

}

#1

requests.post(url, data=json.dumps(data))

#2,json参数会自动将字典类型的对象转换为json格式

requests.post(url, json=data)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线