excel抓取网页动态数据(对于使用ajax动态加载数据的网页要怎么爬取呢?)

优采云 发布时间: 2021-09-19 21:10

  excel抓取网页动态数据(对于使用ajax动态加载数据的网页要怎么爬取呢?)

  目前,许多网站使用ajax技术动态加载数据。与传统的网站不同,数据是动态加载的。如果我们使用传统的方法来抓取网页,我们只会得到一堆没有任何数据的HTML代码

  请参阅以下代码:

  url = 'https://www.toutiao.com/search/?keyword=美女'

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"}

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

print(response.text)

  上面的代码用于抓取今天标题的网页,并打印get方法返回的文本内容,如下图所示。该值现在是一堆网页代码,没有相关的标题新闻信息

  

  内容太多了。只截获部分内容。感兴趣的朋友可以执行上面的代码来查看效果

  如何抓取使用ajax动态加载数据的网页?让我们看看最近的标题如何使用AJAX来加载数据。通过chrome的开发者工具查看数据加载过程

  首先,打开Chrome浏览器,打开开发者工具,单击网络选项,单击XHR选项,然后进入网站:beauty。单击preview选项卡查看通过Ajax请求返回的数据。name列是Ajax请求。当鼠标向下滑动时,将出现多个Ajax请求:

  

  从上图中,我们知道Ajax请求返回的JSON数据是JSON数据。我们继续分析Ajax请求返回的JSON数据,单击数据展开数据,然后单击0展开数据。我们发现有一个标题字段,它的内容恰好与网页的第一个数据匹配。可以看出,这是我们想要抓取的数据。详情如下:

  

  当鼠标向下滚动到网页底部时,将触发Ajax请求。以下是三个Ajax请求:

  https://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=1&from=search_tab&pd=synthesis

https://www.toutiao.com/search_content/?offset=20&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=1&from=search_tab&pd=synthesis

https://www.toutiao.com/search_content/?offset=40&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=1&from=search_tab&pd=synthesis

  观察每个Ajax请求,发现每个Ajax请求都有offset、format、keyword、autoload、count和cur。选项卡、from和PD参数除了offset参数外没有变化。每个Ajax偏移请求的参数变化规则为0,20,40,60...,可以推断offset是偏移量,count参数是Ajax请求中返回的数据数

  为了防止爬虫被阻止,在每个请求期间都应该传输请求头信息。请求标头信息收录浏览器信息。如果请求没有浏览器信息,它将被视为web爬虫,并直接拒绝访问。请求头信息如下所示:

  headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",

"referer": "https://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3",

'x-requested-with': 'XMLHttpRequest'

}

  完整代码如下:

  import requests

from urllib.parse import urlencode

def parse_ajax_web(offset):

url = 'https://www.toutiao.com/search_content/?'

#请求头信息

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",

"referer": "https://www.toutiao.com/search/",

'x-requested-with': 'XMLHttpRequest'

}

#每个ajax请求要传递的参数

parm = {

'offset': offset,

'format': 'json',

'keyword': '美女',

'autoload': 'true',

'count': 20,

'cur_tab': 1,

'from': 'search_tab',

'pd': 'synthesis'

}

#构造ajax请求url

ajax_url = url + urlencode(parm)

#调用ajax请求

response = requests.get(ajax_url, headers=headers)

#ajax请求返回的是json数据,通过调用json()方法得到json数据

json = response.json()

data = json.get('data')

for item in data:

if item.get('title') is not None:

print(item.get('title'))

def main():

#调用ajax的次数,这里调用5次。

for offset in (range(0,5)):

parse_ajax_web(offset*20)

if __name__ == '__main__':

main()

  上面是通过Ajax请求在网站爬行和加载数据的示例。如果需要其他数据,可以自己编写。这里只有一个架子。您可以尝试将数据写入Excel或数据库

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线