Web搜索印度专利网站的专利数据

时间:2016-09-06 19:44:12

标签: python python-2.7 web-scraping beautifulsoup

我正在尝试为Indian patent search website编写一个webscraper来获取有关专利的数据。这是我到目前为止的代码。

#import the necessary modules
import urllib2
#import the beautifulsoup functions to parse the data
from bs4 import BeautifulSoup

#mention the website that you are trying to scrape
patentsite="http://ipindiaservices.gov.in/publicsearch/"

#Query the website and return the html to the variable 'page'
page = urllib2.urlopen(patentsite)

#Parse the html in the 'page' variable, and store it in Beautiful Soup format
soup = BeautifulSoup(page)

print soup

不幸的是,印度专利网站并不健全,或者我不确定如何在这方面继续前进。

这是上述代码的输出。

<!-- 
################################################################### 
##                                                               ##
##                                                               ##
##           SIDDHAST.COM                                        ##            
##                                                               ##
##                                                               ##
################################################################### 
--><!DOCTYPE HTML>
<html>
<head>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta charset="utf-8"/>
<title>:: InPASS - Indian Patent Advanced Search System ::</title>
<link href="resources/ipats-all.css" rel="stylesheet"/>
<script src="app.js" type="text/javascript"></script>
<link href="resources/app.css" rel="stylesheet"/>
</head>
<body></body>
</html>

我想提供的是,假设我提供公司名称,刮刀应该获得该特定公司的所有专利。我想做其他事情,如果我可以使这一部分正确,例如提供一组输入,刮刀将用于寻找专利。但我被困在我无法继续前进的部分。

非常感谢任何有关如何获取此数据的指示。

1 个答案:

答案 0 :(得分:4)

您只需使用请求即可完成此操作。该帖子是 http://ipindiaservices.gov.in/publicsearch/resources/webservices/search.php ,其中包含一个 param rc _ ,这是我们使用 time.time创建的时间戳

"field[]"中的每个值都应与"fieldvalue[]"中的每个值匹配,然后与"operator[]"匹配,无论您选择*AND* *OR*还是{{1}每个键之后的*NOT*指定我们传递一个 value(s)的数组,而没有任何东西可以工作。:

[]

输出将如下所示,我无法全部添加,因为有太多数据要发布:

data = {
    "publication_type_published": "on",
    "publication_type_granted": "on",
    "fieldDate": "APD",
    "datefieldfrom": "19120101",
    "datefieldto": "20160906",
    "operatordate": " AND ",
    "field[]": ["PA"], # claims,.description, patent-number codes go here
    "fieldvalue[]": ["chris*"], # matching values for ^^ go here
    "operator[]": [" AND "], # matching sql logic for ^^ goes here
    "page": "1", #  gives you next page results
    "start": "0", # not sure what effect this actually has.
    "limit": "25"} # not sure how this relates as  len(r.json()[u'record']) stays 25 regardless

import requests
from time import time

post = "http://ipindiaservices.gov.in/publicsearch/resources/webservices/search.php?_dc={}".format(
    str(time()).replace(".", ""))

with requests.Session() as s:
    s.get("http://ipindiaservices.gov.in/publicsearch/")
    s.headers.update({"X-Requested-With": "XMLHttpRequest"})
    r = s.post(post, data=data)
    print(r.json())

如果您使用记录键,您将获得一个词典列表,如:

{u'success': True, u'record': [{u'Publication_Status': u'Published', u'appDate': u'2016/06/16', u'pubDate': u'2016/08/31', u'title': u'ACTUATOR FOR DEPLOYABLE IMPLANT', u'sourceID': u'inpat', u'abstract': u'\n    Systems and methods are provided for usin.............

这是您的专利信息。

您可以看到我们是否在浏览器中选择了一些值,所有 fieldvalue 字段运算符中的值排成一行,{ {1}}是默认设置,因此您可以看到每个选项:

enter image description here

enter image description here

所以弄清楚代码,选择你想要的东西并发布。