目标:近日在学校参加了一个助研活动,要求下载4万多份的报纸,首先这个老师给我们提供了一些消息是中国知网的报纸是免费下载的,但是每个帐号只能下载近三百份左右,故我注册了大概10个账号左右。
一开始,思路比较简单,直接就去爬中国知网,但是这就已经大错特错。因为电脑版的中国知网反爬极其严重(反复爬取就得输入验证码),使我的头发掉了一大把。最后一不小心用上了手机版的中国知网,才算完美的解决了问题。
思路主要如下:首先是获取每份报纸的id,比如老师分配给我的内蒙古日报,其id通常都是MGRB201807200032像这样的格式。
在这个http://wap.cnki.net/acanewslist.aspx?p=2&property=default&channel=CCND&ccndcode=MGRB 可以很轻易的获得其id,而且不会要求输入验证码(其中的p是页码)
在获取id的过程如下:
#-*-coding:utf-8 -*-
# Author:LZW
import requests
from pyquery import PyQuery as pq
import re
import pymongo
import time
import requests.exceptions
lzw = pymongo.MongoClient()
assistant = lzw['ass']
ass = assistant['ass']
pattern = re.compile('baozhi-(.*?).html', re.S)
url = 'http://wap.cnki.net/acanewslist.aspx?p={}&property=default&channel=CCND&ccndcode=MGRB'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Cookie': 'Ecp_ClientId=2171118141202985576; cnkiUserKey=fe7c8caa-ec4f-a151-650c-f315d59f0bbd; UM_distinctid=1612b412fe0e1-0838ebea265002-393d5f0e-144000-1612b412fe1459; SID=201139; SID_qdcnc=000001; Hm_lvt_07a576e0f1481e3cafe74b0eb336a2d7=1532253080; ASP.NET_SessionId=jtjx5uxxq2njsg2tbuds31jz; Login_Session_UserSID=B3673AD8E0D34F0481DE76250A0F0D34; Login_Cookies_UserSID=3029653; Login_Cookies_UserName=767228083%40qq.com; Login_Cookie