• 大小: 7KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-06-07
  • 语言: Python
  • 标签: 爬虫  python  

资源简介

这是一个爬取知网的社科基金项目的代码,用python语言写的,这个代码参考了其他人写的代码。最终能够实现爬取社科基金项目信息的功能,在pycharm3.6下开发,需要替换成你自己的浏览器的cookie。

资源截图

代码片段和文件信息

#web_url = ‘http://kns.cnki.net/kns/detail/detail.aspx?QueryID=0&CurRec=2&DbCode= CJFD&dbname=CJFDTEMP&filename=BJZY201812008&urlid=&yx=‘

import requests  # 导入requests 模块
import re
import time
import xlwt #导入模块

def request(url):  # 返回网页的response
    # print(url)
    # 这里是伪造浏览器信息,和伪造来源
    user_agent = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Ch‘ \
                 ‘rome/58.0.3029.81 Safari/537.36‘
    referer = “http://kns.cnki.net/kns/brief/result.aspx?dbprefix=CJFQ“

    # 这里是伪造cookie,你要从浏览器里复制出来,粘贴在这里
    # 可以把里面的时间不断更新,这样能爬久一点
    cookie = ‘RsPerPage=20; cnkiUserKey=9fc101c4-bc14-27ea-5eb4-f8282ca1742c; UM_distinctid=16527e5f405230-044bded10d4527-4947311e-1fa400-16527e5f4069ff; Ecp_ClientId=5180811152900249267; ASP.NET_SessionId=hbqqazmw3um3z1onutsbxb0d; SID_kns=011116; SID=011108; Ecp_session=1; LID=WEEvREcwSlJHSldRa1FhcEE0RVVzNVhyZTRSWTFraVRHOTdsUDN0bU9NWT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!; _pk_ref=%5B%22%22%2C%22%22%2C1545744171%2C%22http%3A%2F%2Fwww.cnki.net%2F%22%5D; KNS_SortType=; _pk_ses=*‘
    headers = {‘User-Agent‘: user_agent
               “Referer“: referer
               “cookie“: cookie}
    r = requests.get(url headers=headers timeout=30)
    return r

wb = xlwt.Workbook()

sh = wb.add_sheet(“2003测试表“)

sh.write(0 0 ‘序号‘)
sh.write(0 1 ‘题名‘)
sh.write(0 2 ‘作者‘)
sh.write(0 3 ‘单位‘)
sh.write(0 4 ‘文献来源‘)
sh.write(0 5 ‘关键词‘)
sh.write(0 6 ‘摘要‘)
sh.write(0 7 ‘年份‘)
sh.write(0 8 ‘页码‘)

countItem = 1
told = 0
p = 1  # 这里是页数
for num in range(p p + 20):
    # 这里的num是页码
    web_url = ‘http://nvsm.cnki.net/kns/brief/brief.aspx?curpage=%s&Records‘ \
            ‘PerPage=20&QueryID=0&ID=&turnpage=1&tpagemode=L&dbPref‘ \
            ‘ix=CJFQ&Fields=&DisplayMode=listmode&PageName=ASP.brief_‘ \
            ‘result_aspx&isinEn=1‘ % num  # 这里的URL实现了二次加载

    print(‘搜素页的URL=‘ web_url)

    # 这里开始是时间控制
    t = int(time.clock())
    print(t / 60 ‘分钟‘)
    useTime = t - told
    # 如果一个周期的时间使用太短,则等待一段时间
    # 主要用于防止被禁
    if (useTime < 120 and useTime > 10):
        print(“useTime=%s“ % useTime)
        whiteTime = 120 - useTime
        print(“等待%s秒“ % whiteTime)
        time.sleep(whiteTime)
    told = int(time.clock())
    print(t)

    print(‘开始网页get请求‘)
    r = request(web_url)  #
    #print(r.text)

    # 这里是报错的解释,能知道到底是因为什么不能继续爬了
    # 一开始会看爬到的源代码,但是之后正式开始爬的时候,打印页面源代码会拉低爬虫效率
    yan = re.search(r‘参数错误‘ r.text)
    if yan != None:
        print(“参数“)
        break
    yan = re.search(r‘验证码‘ r.text)
    if yan != None:
        print(“验证“)
        break

    countHtml = re.findall(r‘tle“ name=“lbPagertitle“ class=“pagertitle“>([.$\s\S]*?)
‘ r.text)
    print(re.findall(“\d+“ countHtml[0]))
    countItem = int(re.findall(“\d+“ countHtml[0]))
    #这里开始抓列表里每一个文献的url
    #soup = re.findall(r‘‘ r.text)
    soup = re.findall(r‘<

评论

共有 条评论