Python 爬取异步数据

本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。

开始

周六看了李巍老师的直播课程 主要讲解了爬取异步数据的方法,
因为现在大家做爬虫的会知道,现在很多网站都采取了一定的反爬机制,根本不好爬取,特别是像京东、淘宝、b站这样的网站,现在不好爬取了 基本都是异步加载加上其他的反爬机制,来限制爬虫。所以今天在这里的总结学习就是整理记录一下直播课程的内容。

判断是否是异步加载

当我们拿到一个网站的时候,会先去分析这个网站的结构 比如查看源码、检查network,以及直观的去翻页等操作。今天使用的网站是51job.打开网址比如输入python,接下来我们分析一下下面想要爬取的内容,:
在这里插入图片描述
检查(鼠标右击):
在这里插入图片描述
发现我们要的数据其实在这里,是以json的格式存在,所以就需要对json数据进行转换和解析
百度json,会搜到json数据解析工具:
在这里插入图片描述
直接进去就可以使用,
通过请求获取代码,注意这里请求的url不是那个我们搜索的51job的网址,而是刚才我们点击检查的那个网址,
在这里插入图片描述
右击鼠标,copy-copy link address 我们需要的是这个url,接下来发送get请求:
这里直接把全部的code提出来:

import json
import urllib.request,urllib.error     #制定URL,获取网页数据
import re


def main():
    url = "https://search.51job.com/list/090200,000000,0000,00,9,99,python,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare="
    #url = "https://www3.nhk.or.jp/news/json16/word/0000967_002.json"
    #askURL(url)
    result = open('result.html', 'r', encoding='utf-8')
    data = re.findall(r"\"engine_search_result\":(.+?),\"jobid_count\"", str(result.readlines()))
    #print(data[0])
    jsonObj = json.loads(data[0])
    for item in jsonObj:
        print(item['job_name'] + ':' + item['providesalary_text'])

#间隔时间爬取
#代理


def askURL(url):
    head = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  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





if __name__ == "__main__":
    main()

拿到代码后,将请求的html保存为一个html文件,用作分析,
找到这一长行,粘贴到json工具中 ,进行在线解析:
在这里插入图片描述
解析的结果:
在这里插入图片描述
接下来就是对数据进行提取:
通过正则可以看出:

\"engine_search_result\":(.+?),\"jobid_count\"

以engine_search_result开始,以jobid_count结束,这个我们可以把这个解析好的json数据粘贴到在线解析 看看具体的结构:
在这里插入图片描述
粘贴进来之后我们可以点击这个按钮:
在这里插入图片描述
我们点击后:
在这里插入图片描述
发现这正是正则表达式里面的开头和结尾 所以说这是提取这里面的数据,也就是上面显示的50条数据,爬取下来。
代码就是上面的代码,data[0]在这里我们打印一下看一下:
在这里插入图片描述
是这样的一个数组,里面用{}包裹,所以在这里面使用循环语句进行提取:执行结果:
在这里插入图片描述
爬取出我们想要的结果,接下来其实就是做分页的爬取,因为需要找规律甚至有的网站是动态的异步,难度还是有的,下面就是爬多页,进行数据的写入与分析。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值