前言:前两天要爬一个撤稿论文网站,抓包发现请求方式是post。
遇到post怎么办?
不要慌,来一遍:1.利用前端知识分析请求数据。2.selenium模拟浏览器。
但是因为数据比较着急要,在看了post请求数据后,有两条没看懂是如何生成的,便果断转selenium。(太年轻了,修行之路漫漫)
经过分析后知道这个网站主要是输入国籍和时间就可以拿到所属国家的撤稿论文数据,但是只展示600条数据,因此需要注意输入时间不能太久,不然会漏掉数据。(漏掉数据不是我辈行事风格)
在拿完之前的数据后,还存在以后新的数据问题,那么怎么办?(凉拌啊,西虹市炒鸡蛋)
果断利用python的datetime模块,生成一个时间,解析成需要输入的时间数据格式,然后用crontab -e 设置每周末执行一次程序,就可以搞定。(人生苦短,我用python)
生成特定格式时间如下:(mm/dd/yyyy)
import datetime
import re
def get_time(day):
day = str(day) # 改为字符串
all_day = re.split(" ", day)[0] # 进行分割拿到年月日
new_day = re.split("-", all_day)[2] # 日
new_month = re.split("-", all_day)[1] # 月
new_year = re.split("-", all_day)[0] # 年
new_time = "{}/{}/{}".format(new_month, new_day, new_year) # 合并为需要的格式
return new_time
def main():
rs = Retractions_Spider()
# 设置每周日晚上十二点爬取前一周的所有被撤论文
today = datetime.datetime.now() # 拿到现在的时间
oneday = datetime.timedelta(days=7)
day = today - oneday # 七天前的时间
from_day = get_time(day)
to_day = get_time(today)
print(from_day,to_day)
rs.run(from_day,to_day)``
所有任务完成,数据保存为csv格式,以便于后期用pandas继续处理。赶紧把数据发给老师,吃包我心爱的辣条,压压惊。喝杯肥宅快乐水,舒服。那么我们继续。
如何设置自动抓取?
1.写一个sh脚本;(记得chmod +x xxx.sh)
#!/usr/bin/sh
python run.py >>run.log
注意:python一定要用绝对路径下的python,run.py也要用绝对路径。 >>run.log 可以将log信息打印到log文件中,出错可以找到问题。
run.py 可以是你写的一个单独python文件,如果你要用spider或者crawlspider 模块,run.py可以如下(以crawlspider为例):
from scrapy import cmdline
cmdline.execute("scrapy crawl zhiwang".split())
2.定时sh脚本(crontab -e)
这个是linux自带的定时启动脚本的。具体用法如下:
cd etc/crontab (当然你直接 vi crontab -e 也可以)
具体是:minute(0-59) hour(0-23) day of month(1-31) month(1-12) day of week(0-6) sh脚本
例如:周末十二点执行脚本 0 0 * * 6 run.sh
注意:(1)同理run.sh绝对路径。
(2).0代表星期天,*代表每一个,即就是每一分钟,每一小时,每一天,每一月. * * * * * 就表示每一分钟运行一次。
(3)如果是在Linux服务器上,要注意服务器的时间和你电脑的时间可能不一致,在写代码做测试时,要注意,不然会是个大坑。
最后,来一首本死肥宅的打油小诗:
量子力学真神奇,
我不学你又如何。
人生苦短须自乐,
快乐搬砖死肥宅。