动态网站爬虫

作者: 弘列 | 来源:发表于2019-07-16 18:10 被阅读0次

爬取网站:http://output.nsfc.gov.cn/projectQuery
网站特点:需要根据输入的表单信息进行检索,返回的信息在html里不直接显示,并且在翻页的时候url不变化。
这种情况就是需要我们向服务器发送请求,然后拿到数据之后,网站就会把各种数据填充到页面上,因为是通过js填充的,所以html代码里并不会出现。
比如我们需要搜的是[植物学,面上项目,结题年度2009]


在chrome里可以右键检查。数据请求都是XHR类型的。我们点到XHR,我们按检索后可以在Name中发现新的一条更新记录。
点到Response
发现就是我们需要的json文件。接下来写脚本开爬。
import requests
import json
def getProject(expert, code, projectType, ratifyYear):
    url = "http://output.nsfc.gov.cn/baseQuery/data/conclusionQueryResultsData"
    #url就是在Headers里的Request URL 
    #data就是我们需要提交的表单信息Headers里的Request Playload
    data = {
            "ratifyNo":"",
            "projectName":"",
            "personInCharge":"",
            "dependUnit":"",
            "code":"F02",  # 申请代码
            "projectType":"218", # 面上项目
            "subPType":"",
            "psPType":"",
            "keywords":"", # 项目主题词
            "ratifyYear":"2010", # 批准年度
            "conclusionYear":"", 
            "beginYear":"",
            "endYear":"",
            "checkDep":"",
            "checkType":"",
            "quickQueryInput":"",
            "adminID":"",
            "pageNum":1, # 页码,从0开始
            "pageSize":5, # 页面大小
            "queryType":"input",
            "complete":"true"
    }
    data['code'] = code
    data['personInCharge'] = expert
    data['projectType'] = projectType
    data['ratifyYear'] = ratifyYear
    payload = json.dumps(data)
    # headers就是Request Headers 我们要伪装成自己的浏览器去发送请求
    headers = {
        'origin': "http://output.nsfc.gov.cn",
        'accept-encoding': "gzip, deflate",
        'accept-language': "zh-CN,zh;q=0.9,en;q=0.8",
        'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
        'content-type': "application/json",
        'accept': "*/*",
        'referer': "http://output.nsfc.gov.cn/projectQuery",
        'x-requested-with': "XMLHttpRequest",
        'connection': "keep-alive",
        'cache-control': "no-cache",
        }

    response = requests.request("POST", url, data=payload, headers=headers)#发送请求并获得返回数据

    print(response.text) #打印爬下来的数据

相关文章

  • 目标研究小方向

    钓鱼WiFi dll注入exe 爬虫 知识图谱 动态网站

  • 动态网站爬虫

    爬取网站:http://output.nsfc.gov.cn/projectQuery网站特点:需要根据输入的表单...

  • Python实现爬取可用代理IP

    在实现爬虫时,动态设置代理IP可以有效防止反爬虫,但对于普通爬虫初学者需要在代理网站上测试可用代理IP。由于手动测...

  • 使用爬虫代理采集网站失败的解决方法

    爬虫程序采集网站必须使用动态代理,才能避免出现网站访问频繁的限制,这是众所周知的。但是在具体采集网站的过程中,即使...

  • Mac使用Scrapy爬虫(一)

    近期项目需要,要对一个动态加载的网站进行爬虫。而且由于对于性能要求较高,且需要数据持久化,因此采用现有较或的爬虫框...

  • 了解爬虫1

    crapy爬虫=数据采集 简单:静态网站 难:动态、加密(逆向)、验证码(滑动、点击、倒立) 数据为王: 数据怎么...

  • 求教:如何破解反爬虫策略获取动态json数据

    场景描述:最近自己搞了一个爬虫项目,爬的是LG的网站,这个网站的列表上数据是通过ajax动态获取的json填充到页...

  • 爬虫初窥

    静态爬虫和动态爬虫 静态爬虫:页面数据的展示不依靠js等和后台的交互。动态爬虫:页面的数据需要通过js,ajax等...

  • Python爬取豆瓣电影动态数据

    之前我们使用爬虫只是模拟浏览器发送一条url请求,就可以爬取网站的页面。然而很多网站的数据是通过Ajax动态发送的...

  • Python 爬虫_动态网页抓取

    挖坑____ 理解静态网页 理解动态网页 爬虫的基本原理 爬虫与网页内容之间的关系 使用爬虫抓取动态网页内容

网友评论

    本文标题:动态网站爬虫

    本文链接:https://www.haomeiwen.com/subject/zmotlctx.html