Python爬虫:全国大学招生信息(一):爬取数据 (多进程、多线程、代理)

本文介绍了使用Python爬虫抓取高考派网站上的全国大学招生信息,涉及多进程、多线程及代理IP的使用。通过获取学校ID和省份信息,构造请求参数,对数据进行批量抓取,并处理可能遇到的网络问题和无效数据。最终获得包含61553条有效数据的243M文本文件。
摘要由CSDN通过智能技术生成

无聊爬爬,仅供学习,无其他用途

这几天在高考派(http://www.gaokaopai.com/)上爬招生信息,其中也绕了不少弯路也学到了许多。

以下为涉及到的模块

import requests
from fake_useragent import UserAgent
from multiprocessing import Process
import urllib.request as r
import threading
import re
import time
import random

首先看我们需要爬取的网页

不同学校对应文科理科以及全国各省才能确定招生计划,通过点击搜索可以获取到一个请求页面,是通过ajax实现的

其中发送的数据如下

通过多个页面对比可以知道id指的是学校id,tpye为1或2指的是文科或理科,city自然是城市号,state为1或0表示有或无招生计划。

所以我们需要先获取全部id和city并写入到txt中,这部分通过在首页中使用BeautifulSoup和正则来实现,具体代码很简单,得到学校和对应的url、省份与id号的文本文件:

一共有3054个大学

以及31个省份

然后通过进入各个大学的url中发送请求获取json数据

#获取id列表
def getSchoolIdList():
#...

#获取city列表
def getCityIdList():
# ...

#获取请求数据列表
def getDataList(schoolId,cityId):
    dataList = []
    for sid in schoolId:
        for cid in cityId:
            for type in [1, 2]:
                dataList.append('id={}&type={}&city={}&state=1'.format(sid, type, cid))
    return dataList

也就是说一共有3054x31x2=189348个数据需要获取

并且考虑到是大量数据,为了防止被封还得设置代理以及不同的消息头

我是通过向代理网站发送请求获取代理ip(19块一天,不过能无限取),另外在proxies字典中如果是'http'会报错,'http'和'http'都有也有错误,不知为啥,索性从代理网站获取https的ip

#获取代理ip列表,其中有15个ip
def getProxyList():
    url1 = 'http://api3.xiguadaili.com/ip/?tid=558070598680507&num=15&delay=1&category=2&protocol=https'
    res = requests.get(url1)
    proxyList = []
    for ip in res.text.split('\r\n'):
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值