0

我正在尝试从与我的搜索查询匹配的美国专利网站获取所有专利号的列表。下面示例查询中的结果总共有约 700 个条目。该页面一次只显示 50 个条目,我无法增加这个数字。

一种方法是一次复制所有 50 个条目并粘贴到 MS excel 中并重复此操作直到最后一页。这种方法既费时又令人沮丧。有没有一种有效的方法来以编程方式(最好是 Python 或 R)或一次获取整个列表。

http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=%2Fnetahtml%2FPTO%2Fsearch-adv.html&r=0&p=1&f=S&l=50&Query=ACLM%2F%28%22TRANSCRIPTION+FACTORS %22%29&d=PG01

4

1 回答 1

1

你可以使用MechanizeBeautifulSoup4来用 Python 做到这一点。它们相对容易安装。您可以使用 Mechanize 以外的库来浏览互联网,但我发现它非常易于使用。您还可以使用Shelve模块以 python 可读(字典)格式存储信息位。

整个代码将有 100 多行,具体取决于您想要获得多少信息。

通常,以下是您编写程序的方式:

  1. 创建一个浏览器对象br=mechanize.Browser()

  2. 使用浏览器打开一个页面r=br.open(url)

  3. 使用读取页面的 htmlhtml=r.read()

  4. 使用 BeautifulSoup 将 html 解析为可读格式soup=BeautifulSoup(html)

  5. 用于soup.findAll()查找包含指向所需页面的链接的 html 元素。要了解 html 中哪些对象包含此信息的模式,我建议使用 Internet 浏览器检查 html 元素和源代码。这样你就知道你在找什么了。有时这有点棘手,因为在不同但相似的页面上的索引不同。

每当您需要获取更多信息时,您可以使用新网址继续重复步骤 2-5。这是您可以在底部导航页面的方式(每页限制为 50 个条目,但您可以自动导航它们)。

这是我拥有的网络爬虫的一些示例代码:

url_dict=shelve.open(html_filename)
#opens webpage  
r=br.open(first_url)
for i in range(1,20):
    #navigates upper browser to next page for non-first-pages
    if (i !=1):
        r=br.open(first_url+str(i)+'_p/')
    #collects list of urls to be navigated by sr
    html=r.read()
    soup=BeautifulSoup(html)
    frames=soup.find_all("a",{"class":br_class})#br_class is defined globally
    time.sleep(1)
    for item in frames:
        url_suffix=item['href']
        full_url=url_prefix+url_suffix
        full_url=full_url.encode('ascii','ignore')
        if str(full_url) not in url_dict:
            url_dict[str(full_url)]=get_information(full_url,sr)
        time.sleep(1)

get_information() 方法查看各种 url 并返回信息字典。这存储在一个文件中(使用搁置模块),因此我可以稍后将其写入人类可读的文件。由于您只查看专利号,因此这可能没有必要。

完成所有这些后,您可以使用 Python 写入 csv 文件。

这是我为爬虫制作的制表符分隔的 csv-creator。我仍然需要调试它,但总体布局是正确的。

def parse_data():
    data=shelve.open(html_filename)
    with open(out_file,'w') as out_handle:
        line = '\t'
        for item in header_list:
            line=line+item+'\t'
        out_handle.write(line)
        for url in data:
            line=""
            for item in header_list:
                line=line+data[item]+'\t'
                out_handle.write(line)
    print("Done writing data")
    data.close()

创建文件后,您可以在 Windows 命令行上使用python [filename]while 在正确的目录中运行它。

于 2013-10-23T04:20:19.893 回答