腾讯T6大佬整理的python爬虫笔记,看完爬虫不会感觉那么难

描述:

目前准备爬取一家目标网站的公开数据,预测将累计发起 百万次 api 请求,每个爬虫脚本都是单进程、单线程。把想要爬取的数据,按关键字段(如id)拆分多段(每段为 10000 条数据),分别安排给不同的爬虫同时爬取。这些爬虫,我称之为爬虫群。爬取到的数据我都存储在本地的mysql中。

我是如何实现爬虫群呢?用的是 jupyter lab,创建N个 .ipynb 文件,每个文件创建一个 cell,并把初始爬虫脚本拷贝进去,并修改关键参数(如起始id),然后启动该cell,即激活该爬虫。

如果主动关闭爬虫群,或因为异常重启爬虫群,关键参数(如起始id),需要检测已爬取的情况,修改该值然后重新启动。

创建 20 多个爬虫文件,修改每个爬虫文件中的 id ,用手工操作太低效。这是一个可以优化的地方。

疑问:

如何用 python 脚本实现自动化检测已爬取的情况,修改关键参数,并批量生成或修改爬虫群呢?

思路:

1、需求1:检测已爬取的情况。所需知识技能:python 读取 mysql数据,并对数据进行统计分析。我用到 pymysql 和 pandas。

2、需求2:修改关键参数,批量生成爬虫群(N个文件)。所需知识技能:python 批量创建文件。很简单,for循环+写文件。

结论:

共用2段脚本分别完成需求 1 和 2。实际使用时,先执行脚本1,再执行脚本2(当然也可以把两个脚本放在一块,一次性执行完毕)。

1、需求1的脚本(关键信息已模糊处理)


 


import datetime
import pandas as pd
import pymysql

connect = pymysql.connect('localhost','username','password','database_name')
cursor = connect.cursor()

sql_search = 'SELECT `id` FROM `table_name`;'
users_data = pd.read_sql(sql_search,connect)

connect.close()
cursor.close()

print(datetime.datetime.now(),'准备就绪')

ids = users_data['id'].to_frame()
id_lvs = []
for id_lv in range(0,1200000,10000):
    try:
        x =ids[(ids['id']>=id_lv) & (ids['id']<(id_lv+10000))]
        y = x['id'].values.max()
        id_lvs.append((id_lv,y))
    except ValueError:
        continue
else:
    rlt = pd.DataFrame(id_lvs,columns=["from_id","got_to"])

2、需求2的脚本(关键信息已模糊处理)


import os.path
import sys

def check_mkdir(path):
    path=path.strip()
    path=path.rstrip("\\")
    isExists=os.path.exists(path)
    if not isExists:
        os.makedirs(path)
        print(datetime.datetime.now(), ' 创建文件夹 ', path)
    else:
        print(datetime.datetime.now(), ' 文件夹已存在 ', path)

path = "dir_name/"
check_mkdir(path)


file_content_1 = r"""{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#爬虫脚本片段1","""


file_content_2 = r"""\n",
    "#爬虫脚本片段2"""



file_content_3 = r"""\n",
    "#爬虫脚本片段3"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

"""

for got_to in rlt['got_to'].values:
    start_idi = (got_to//10000)*10000
    file_content = file_content_1 + str(got_to+1) + file_content_2 + str(start_idi+10000) + file_content_3
    f = open('./dir_name/dir_name%s'%start_idi + '.ipynb',"a",encoding='utf-8')
    f.write(file_content)
    f.close()

print(datetime.datetime.now(),"批量创建完毕") 

请留意,在脚本2中,我把爬虫脚本的具体内容已经模糊掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Python进行腾讯招聘信息的爬虫可以通过发送GET请求获取JSON格式的响应内容,并将其转化为Python对象。首先,需要引入requests和json模块。通过计算时间戳,构造请求链接并发送GET请求获取响应内容。然后,使用json.loads()方法将响应内容转化为Python对象。根据响应内容的结构,可以提取出招聘信息的相关数据,并进行处理和输出。 具体***headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36' } url = base_url.format(timestamp) res = requests.get(url, headers=headers) content_dict = json.loads(res.content.decode('utf8')) posts_data = content_dict['Data']['Posts'] for i in range(len(posts_data)): postname = posts_data[i]['RecruitPostName'] catgoryname = posts_data[i]['CategoryName'] respon = posts_data[i]['Responsibility'].replace("\n", "") print(postname, catgoryname, respon) ``` 以上代码将会发送GET请求并获取腾讯招聘信息中关于Python的岗位名称、类别名称和岗位职责,并输出到控制台。可以根据需要进行进一步处理和存储。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python爬虫之以腾讯招聘为例,爬取动态页面](https://blog.csdn.net/u014543416/article/details/121506217)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python爬虫腾讯翻译实现中英翻译](https://blog.csdn.net/weixin_39847945/article/details/110315407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值