爬虫学习案例2:异步爬取

异步爬取

异步爬取即爬取动态URL的数据,在网页源代码中找不到需要的数据只有在F12控制台中通过查看资源请求包才能找到对应的数据了URL。一般动态网页采用AJAX框架,只有在访问时才从服务器获取数据不会提前全部静态展示。 其工作原理如下图:
AJAX原理
下面以NHK新闻网为例,其URL为link。查看源代码发现不能找到新闻内容,在F12控制台中刷新网页找到含新闻内容的资源包,其中第二页URL为link。以该URL进行爬取数据。

1、导入模块

import json
import re
import urllib.request,urllib.error

2、定义主函数

def main():
    url = "https://www3.nhk.or.jp/news/json16/word/0000967_003.json"
    AskUrl(url)
    print(AskUrl(url))

3、数据爬取

#得到指定一个URL的网页内容
def AskUrl(url):
    #head模拟浏览器头部信息,向豆瓣发送消息
    #User-Agent告诉豆瓣服务器,我们为xxx浏览器(伪装)
    head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
    request = urllib.request.Request(url,headers=head) #封装请求
    html = ""
    try:
        response = urllib.request.urlopen(request) #发送请求
        html = response.read().decode("gbk")  #读取解码返回值
        # print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):#出错代码
            print(e.code)
        if hasattr(e,"reason"):#出错原因
            print(e.reason)

    return html

注意:获取到的网页源代码中含有的新闻信息是json字符串格式,利用正则表达式筛选需要的数据后需要利用json.loads()函数将json字符串转为字典类型再作处理。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Ajax 异步加载商品分类信息的案例: 1. HTML 页面中设置一个 select 元素,用于显示商品分类信息: ```html <select id="category"> <option value="">请选择商品分类</option> </select> ``` 2. 编写 JavaScript 代码,通过 Ajax 获取商品分类信息,并将其添加到 select 元素中: ```javascript // 创建 XMLHttpRequest 对象 var xhr = new XMLHttpRequest(); // 设置请求地址和请求方法 xhr.open('GET', 'http://localhost/getCategory', true); // 发送 Ajax 请求 xhr.send(); // 监听 Ajax 请求状态变化 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 获取服务器返回的 JSON 数据 var data = JSON.parse(xhr.responseText); // 获取 select 元素 var categorySelect = document.getElementById('category'); // 遍历商品分类信息,并添加到 select 元素中 for (var i = 0; i < data.length; i++) { var option = document.createElement('option'); option.value = data[i].id; option.text = data[i].name; categorySelect.appendChild(option); } } }; ``` 3. 在服务器端处理 Ajax 请求,返回商品分类信息的 JSON 数据: ```php <?php // 获取商品分类信息 $categories = get_categories(); // 将商品分类信息转换成 JSON 格式 $json = json_encode($categories); // 设置响应头,告诉浏览器返回的是 JSON 数据 header('Content-Type: application/json'); // 返回 JSON 数据 echo $json; ?> ``` 注意:上面的代码仅为示例,请根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值