爬虫案例——爬取腾讯社招

案例需求:

1.爬取腾讯社招的数据(搜索 | 腾讯招聘)包括岗位名称+链接+时间+公司名称

2.爬取所有页(翻页)

3.利用jsonpath进行数据解析

4.保存数据:txt文本形式和excel文件两种形式

解析:

1.分析该网站同步还是异步?——异步(查看xhr)

2.找到正确的数据包——看响应内容

248be5ef208a40bf8eed9b2db2160d66.png

3.复制请求地址

https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1727929418908&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex=3&pageSize=10&language=zh-cn&area=cn

4.删除不必要的,找到正确的(可删可不删)

https://careers.tencent.com/tencentcareer/api/post/Query?

5.该网站反爬手段比较强,给其进行伪装

9294c408ea7e47529546f4b23da1cfef.png

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
data = {
    'timestamp': '1648355434381',
    'countryId': '',
    'cityId': '',
    'bgIds': '',
    'productId': '',
    'categoryId': '',
    'parentCategoryId': '40001',
    'attrId': '',
    'keyword': '',
    'pageIndex': i,
    'pageSize': '10',
    'language': 'zh-cn',
    'area': 'cn'
}

6.保存在excel文件中,创建对象

wb = workbook.Workbook()  # 创建Excel对象
ws = wb.active  # 激活当前表
ws.append(['职称', '链接', '时间', '公司名称'])

进行excel保存

def save_excel(z,l,s,g):
    my_list = [z,l,s,g]  # 以列表形式写入
    ws.append(my_list)
    wb.save('腾讯社招.xlsx')

进行本地文本保存

def save_text(n,u,t,p):
    with open('腾讯社招.txt','a',encoding='utf-8')as f:
        f.write(n+'\n')
        f.write(u+'\n')
        f.write(t+'\n')
        f.write(p+'\n')

7.使用jsonpath解析数据

names = jsonpath(r, '$..RecruitPostName')
urls = jsonpath(r, '$..PostURL')
times = jsonpath(r, '$..LastUpdateTime')
pronames = jsonpath(r, '$..ProductName')

8.处理解析的数据

for name, url, time, protime in zip(names, urls, times, pronames):
    # print(name,url,time,protime)
    save_text(name, url, time, protime)
    save_excel(name, url, time, protime)

9.翻页分析

c6568a8fa0ff4918a4f0b2b25562e15a.png

for i in range(1,6):
    print("第{}页已经保存完毕!!!".format(i))
    # url = 'https://careers.tencent.com/search.html'
    data = {
        'timestamp': '1648355434381',
        'countryId': '',
        'cityId': '',
        'bgIds': '',
        'productId': '',
        'categoryId': '',
        'parentCategoryId': '40001',
        'attrId': '',
        'keyword': '',
        'pageIndex': i,
        'pageSize': '10',
        'language': 'zh-cn',
        'area': 'cn'
    }

示例代码:

import requests
from jsonpath import jsonpath
from openpyxl import workbook
import time
#"http://careers.tencent.com/jobdesc.html?postId=1685827130673340416"
def get_data():
    response = requests.get(url, headers=headers, params=data)
    r = response.json()
    return r

def parse_data(r):
    names = jsonpath(r, '$..RecruitPostName')
    urls = jsonpath(r, '$..PostURL')
    times = jsonpath(r, '$..LastUpdateTime')
    pronames = jsonpath(r, '$..ProductName')
    for name, url, time, protime in zip(names, urls, times, pronames):
        # print(name,url,time,protime)
        save_text(name, url, time, protime)
        save_excel(name, url, time, protime)
# 保存数据
def save_text(n,u,t,p):
    with open('腾讯社招.txt','a',encoding='utf-8')as f:
        f.write(n+'\n')
        f.write(u+'\n')
        f.write(t+'\n')
        f.write(p+'\n')

def save_excel(z,l,s,g):
    my_list = [z,l,s,g]  # 以列表形式写入
    ws.append(my_list)
    wb.save('腾讯社招.xlsx')
if __name__ == '__main__':
    wb = workbook.Workbook()  # 创建Excel对象
    ws = wb.active  # 激活当前表
    ws.append(['职称', '链接', '时间', '公司名称'])
    url = 'https://careers.tencent.com/tencentcareer/api/post/Query?'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
    }
    for i in range(1,6):
        print("第{}页已经保存完毕!!!".format(i))
        # url = 'https://careers.tencent.com/search.html'
        data = {
            'timestamp': '1648355434381',
            'countryId': '',
            'cityId': '',
            'bgIds': '',
            'productId': '',
            'categoryId': '',
            'parentCategoryId': '40001',
            'attrId': '',
            'keyword': '',
            'pageIndex': i,
            'pageSize': '10',
            'language': 'zh-cn',
            'area': 'cn'
        }
        time.sleep(2)
        h=get_data()
        parse_data(h)

 运行结果:

5b297631782349a3ab87c4ec5bea1552.png

2280fac13247497694425f4fa7d9f1bd.png

e4b08dce72b94653b76aa69e630d34b5.png

同样也可以添加代理来进行

添加代理

zhima_api = 'http://http.tiqu.letecs.com/getip3?num=1&type=1&pro=&city=0&yys=0&port=1&pack=225683&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=1&regions=&gm=4'
proxie_ip = requests.get(zhima_api).json()['data'][0]
print(proxie_ip)
# 将提取后的IP处理成字典形式 构造完整HTTP代理
proxies = {
        'http': 'http://' + str(proxie_ip['ip']) + ':' + str(proxie_ip['port']),
        #'https': 'https://' + str(proxie_ip['ip']) + ':' + str(proxie_ip['port'])
}

 

好的,您想了解关于Java版Web搜索爬虫系统和Java开源爬虫框架WebCollector的教程,主要是如何爬取搜索引擎的内容,对吗?那我来给您介绍一下。 WebCollector是一款Java开源爬虫框架,它基于Jsoup解析库,提供了一系列简单易用的API,可以帮助用户快速开发爬虫程序。WebCollector可以用于爬取各种类型的网站,包括搜索引擎。 下面是一个简单的WebCollector爬虫程序示例,可以用来爬取百度搜索结果页面的内容: ```java import cn.edu.hfut.dmic.webcollector.model.Page; import cn.edu.hfut.dmic.webcollector.net.HttpRequest; import cn.edu.hfut.dmic.webcollector.net.HttpResponse; import cn.edu.hfut.dmic.webcollector.net.Requester; import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler; public class BaiduSearchCrawler extends BreadthCrawler { public BaiduSearchCrawler(String crawlPath, boolean autoParse) { super(crawlPath, autoParse); this.addSeed("https://www.baidu.com/s?wd=webcollector"); } public void visit(Page page, HttpRequest httpRequest, HttpResponse httpResponse) { System.out.println(page.getHtml()); } public static void main(String[] args) throws Exception { BaiduSearchCrawler crawler = new BaiduSearchCrawler("crawl", true); crawler.setThreads(10); crawler.start(2); } } ``` 在这个示例中,我们定义了一个名为BaiduSearchCrawler的类,它继承自BreadthCrawler类。在BaiduSearchCrawler的构造函数中,我们指定了爬虫程序的爬取路径和是否自动解析网页内容。然后,我们使用addSeed()方法添加了一个种子URL,这个URL是百度搜索webcollector的结果页面。 在visit()方法中,我们定义了爬取页面时的处理逻辑,这里我们只是简单地将页面内容打印出来。在main()方法中,我们创建了一个BaiduSearchCrawler对象,设置了线程数为10,并启动了爬虫程序。 当您运行这个程序时,它将会爬取百度搜索webcollector的结果页面,并将页面内容打印出来。 当然,实际的爬虫程序往往比这个示例要复杂得多,需要考虑到各种情况和异常处理。但是,WebCollector的API非常简单易用,您可以根据自己的需求快速开发出符合要求的爬虫程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值