本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。
开始
周六看了李巍老师的直播课程 主要讲解了爬取异步数据的方法,
因为现在大家做爬虫的会知道,现在很多网站都采取了一定的反爬机制,根本不好爬取,特别是像京东、淘宝、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°reefrom=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]在这里我们打印一下看一下:
是这样的一个数组,里面用{}包裹,所以在这里面使用循环语句进行提取:执行结果:
爬取出我们想要的结果,接下来其实就是做分页的爬取,因为需要找规律甚至有的网站是动态的异步,难度还是有的,下面就是爬多页,进行数据的写入与分析。