用python爬取需要cookie信息的网站

本次创作实验网站:实验网址

本次创作语言:python2

编译用到的工具:pycharm,Fiddler

首先我们打开这个网站,不难发现,在高级检索目录下的内容是需要登录后才能获取到的,所以我们需要先注册账号,进入高级检索界面,我们就可以筛选信息了,而我们现在需要爬虫去实现的功能就是在不登录的情况下,能够爬取到该页面的我们自己筛选想爬取下来的信息。

准备工作:注册该网站,并登录

第一步:进入该网站的首页:首页

然后打开自己的抓包工具(本人使用的是FIddler),首先将FIddler页面的信息清空一下,方便等下查阅该网站的信息。

第二步:点击高级检索,进入页面,选择检索内容,本次实验暂时只选择    中国发明申请    和公开日   日期随意选择

 

第三步:点击检索,然后打开抓包工具,抓取网站信息,因为我们通过观察,发现这个网站的存储信息方式是通过ajax方式存储信息的,所以我们要通过获取ajax信息,从而得到我们需要的信息。

知道了这些,我们可以开始编写本次爬虫的代码了。

#coding=utf-8
import urllib2
import re
class Spider:
    def loadinfo(self,n):
        self.page=n    //将输入的爬取页面信息存储下来
        headers = {   //headers信息是通过抓包工具拿下来的
        "Host": "www.sooip.com.cn",
        "Connection": "keep-alive",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Referer": "http://www.sooip.com.cn/app/patent2",
        }
        fromdata = {//formdata信息通过抓包工具得到的,在存储信息的ajax网页的webfroms里
            "attribute-node:patent_cache-flag": "false",
            "attribute-node:patent_page": "self.page",     //当前页码
            "attribute-node:patent_page-row": "10",   //每页显示多少信息
            "attribute-node:patent_sort-column": "ano",
            "attribute-node:patent_start-row": 1+10*self.page,//从第几行开始爬取
            "categoryIndex": "",
            "express": "(公开(公告)日 =  ( 20170104 ) )",//我们当时输入的检索信息
            "express2": "",   //可以尝试输入其他信息来得到
            "isFamily": "",
            "order": "",
            "patentLib": "pdb = 'CNA0' OR pdb = 'CNB0' OR pdb = 'CNY0' OR pdb = 'CNS0'",//专利选择(我们当时输入的检索信息)
            "patentType": "patent2",
            "pdbt": "",
            "secondKeyWord": "名称+摘要+主权项",
            "secondkeyWordVal": "",
            "secondSearchType": "AND",
            "selectedCategory": "",
//以上信息都是根据你输入的检索信息得到的,所以想实现筛选需要的信息,可以直接从这里修改
        }
        url = "http://www.sooip.com.cn/txnPatentData01.ajax"                            
  //这个网站的信息是通过抓包工具得到的,因为信息是存储在ajax里,所以我们应该找到存储信息的网址
        data=urllib.urlencode(fromdata)
        requests = urllib2.Request(url=url,data=data,headers=headers)
        response = urllib2.urlopen(requests)
        html = response.read()//本次的匹配规则使用的是正则,也可以使用beautifulsoup
        name = re.compile('<TIO>(.*?)</TIO>', re.S).findall(html)
        shengqinghao = re.compile('<ANO>(.*?)</ANO>', re.S).findall(html)
        date = re.compile('<AD>(.*?)</AD>', re.S).findall(html)
        gongkaihao = re.compile('<PNO>(.*?)</PNO>', re.S).findall(html)
        gongkaihri = re.compile('<PD>(.*?)</PD>', re.S).findall(html)
        ren = re.compile('<APO>(.*?)</APO>', re.S).findall(html)
        faming = re.compile('<INO>(.*?)</INO>', re.S).findall(html)
        ipc = re.compile('<IPC>(.*?)</IPC>', re.S).findall(html)
        info = re.compile('<ABSO>(.*?)</ABSO>', re.S).findall(html)
        for i in range(len(name)):
            # print(name[i])
            content.append(name[i])//将爬取到的信息存储在该数组中
            # print("申请号:%s"%(shengqinghao[i]))
            content.append(shengqinghao[i])
            # print(date[i])
            content.append(date[i])
            # print(gongkaihao[i])
            content.append(gongkaihao[i])
            # print(gongkaihri[i])
            content.append(gongkaihri[i])
            # print(ren[i])
            content.append(ren[i])
            # print(faming[i])
            content.append(faming[i])
            # print(ipc[i])
            content.append(ipc[i])
            # print(info[i])
            content.append(info[i])
    def writepage(self,content)://将该数组存储在本地文件中
        for word in content:
            with open("zhuangli.txt","a") as f:
                f.write(word+'\n')

if __name__ == "__main__":

    n=(input("请输入需要爬取的页码:"))
    xuexi=Spider()
    content=[]
    for i in range(n):
        xuexi.loadinfo(i)
        print("第%s页爬取完成"%(i+1))
    xuexi.writepage(content)

如有问题,请在下方评论,欢迎斧正,谢谢!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spider boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值