tomleung1996 / wos_crawler

Web of Science Crawler
223 stars 73 forks source link

GUI爬取时在哪里输入sid? #6

Closed matrixChimera closed 4 years ago

matrixChimera commented 4 years ago

问题:

  1. 请问使用GUI爬取时在main.py文件的什么地方输入sid?
  2. 为什么我使用以下代码使用检索式下载仍不成功并提示“SID提取失败”?
from gui.main_gui import *
import settings
from scrapy import cmdline

def crawl_by_query(query, output_path='../output', document_type='Article', output_format='bibtex', sid=''):
    cmdline.execute(
        r'scrapy crawl wos_advanced_query_spider -a output_path={} -a output_format={}'.format(
            output_path, output_format).split() +
        ['-a', 'query={}'.format(query), '-a', 'document_type={}'.format(document_type), '-a', 'sid={}'.format(sid)])

def crawl_by_journal(journal_list_path, output_path='../output', document_type='Article', output_format='bibtex'):
    cmdline.execute(
        r'scrapy crawl wos_journal_10k_spider -a journal_list_path={} -a output_path={} -a output_format={}'.format(journal_list_path, output_path, output_format).split() + ['-a', 'document_type={}'.format(
            document_type)])

def crawl_by_gui():
    gui_crawler = GuiCrawler()
    gui_crawler.show()
    reactor.run()

if __name__ == '__main__':
    # 按期刊下载
    # crawl_by_journal(journal_list_path=r'C:\Users\Tom\PycharmProjects\wos_crawler\input\journal_list_test.txt',output_path=r'E:\wos爬取结果', output_format='fieldtagged', document_type='')

    # 按检索式下载
    crawl_by_query(query='TS=(solid waste) AND PY=(1900-1978)',output_path='../output',output_format='fieldtagged', document_type='Article', sid='E5gsGHmjPtA2AxeNeM6')

    # 使用GUI下载
    # crawl_by_gui()
    pass

平台:

Macos Catalina 版本 10.15.1

下载代码时间:

2020-03-31

tomleung1996 commented 4 years ago

GUI暂不支持输入SID,如果您的IP没有WOS访问器,这个爬虫也无法帮您获得数据。 如果您能够获得SID,请调用相应的函数并进行传参

如果您已经传入SID,请确保SID正确,我刚刚尝试爬取并未出现问题(近期WOS访问比较慢,可能需要代理,代理不影响SID)。如果成功执行,提示信息如下:

使用给定的SID: XXX 已购买的数据库为: ['IC', 'SCI', 'CCR', 'ESCI', 'AHCI', 'SSCI', 'ISSHP', 'ISTP'] 提取得到qid: 1 共有XXX条文献需要下载 正在下载第 1 到第 500 条文献

matrixChimera commented 4 years ago

GUI暂不支持输入SID,如果您的IP没有WOS访问器,这个爬虫也无法帮您获得数据。 如果您能够获得SID,请调用相应的函数并进行传参

如果您已经传入SID,请确保SID正确,我刚刚尝试爬取并未出现问题(近期WOS访问比较慢,可能需要代理,代理不影响SID)。如果成功执行,提示信息如下:

使用给定的SID: XXX 已购买的数据库为: ['IC', 'SCI', 'CCR', 'ESCI', 'AHCI', 'SSCI', 'ISSHP', 'ISTP'] 提取得到qid: 1 共有XXX条文献需要下载 正在下载第 1 到第 500 条文献

非常感谢@tomleung1996

按照@tomleung1996的方法尝试成功,成功要点如下,以供其他朋友参考:

1. 基于GUI图形界面(PyQt5)爬取数据时:

  1. 下载本项目全部文件;
  2. 在终端(Mac)中使用pip命令安装本项目用到的Python库:
pip install PyQt5 -i https://pypi.douban.com/simple

pip install qt5reactor -i https://pypi.douban.com/simple

pip install scrapy -i https://pypi.douban.com/simple

pip install bs4 -i https://pypi.douban.com/simple

pip install bibtexparser -i https://pypi.douban.com/simple

pip install sqlalchemy -i https://pypi.douban.com/simple

pip install networkX -i https://pypi.douban.com/simple
  1. 取消main.py文件中“使用GUI下载”对应函数代码行的注释,但注释掉其他无需用到的方法的对应代码行:

#……(省略了main.py文件中的其他无需修改的代码)#

if __name__ == '__main__':
    # 按期刊下载
    # crawl_by_journal(journal_list_path=r'C:\Users\Tom\PycharmProjects\wos_crawler\input\journal_list_test.txt',
    #                  output_path=r'E:\wos爬取结果', output_format='fieldtagged', document_type='')

    # 按检索式下载——为各参数填入相应的值:
    # crawl_by_query(query='TS=(neurofibroma) AND PY=(2000-2020)',
                   output_path='../output', output_format='fieldtagged', document_type='Article', sid='')

    # 使用GUI下载(仅在校园网IP地址内可用,使用时无需输入SID,直接运行代码)
    crawl_by_gui()
    pass
  1. 运行main.py文件,在图形界面中填入必须的信息。但无需手动填写SID;(可能)必须在校园网IP地址内才能使用——因为本项目基于GUI爬取数据时(可能是)自动 根据IP地址获取校园网已购买的WoS数据库的SID: GUI图形界面
  2. 成功后自动生成output文件夹及相应数据。

2. 基于Python API爬取数据时(以选择“按检索式下载”为例):

  1. 下载本项目全部文件;
  2. 在终端(Mac)中使用pip命令安装本项目用到的Python库:
pip install PyQt5 -i https://pypi.douban.com/simple

pip install qt5reactor -i https://pypi.douban.com/simple

pip install scrapy -i https://pypi.douban.com/simple

pip install bs4 -i https://pypi.douban.com/simple

pip install bibtexparser -i https://pypi.douban.com/simple

pip install sqlalchemy -i https://pypi.douban.com/simple

pip install networkX -i https://pypi.douban.com/simple
  1. 取消main.py文件中“按检索式下载”对应函数代码行的注释,但注释掉其他无需用到的方法的对应代码行;
  2. 在“按检索式下载”对应的函数中填入参数值:

#……(省略了main.py文件中的其他无需修改的代码)#

if __name__ == '__main__':
    # 按期刊下载
    # crawl_by_journal(journal_list_path=r'C:\Users\Tom\PycharmProjects\wos_crawler\input\journal_list_test.txt',
    #                  output_path=r'E:\wos爬取结果', output_format='fieldtagged', document_type='')

    # 按检索式下载——为各参数填入相应的值:
    crawl_by_query(query='TS=(neurofibroma) AND PY=(2000-2020)',
                   output_path='../output', output_format='fieldtagged', document_type='Article', sid='')

    # 使用GUI下载(仅在校园网IP地址内可用,使用时无需输入SID,直接运行代码)
    # crawl_by_gui()
    pass
  1. 运行main.py文件,成功后自动生成output文件夹及相应数据: main py运行结果

注意事项:

  1. 获取SID的方法:在浏览器中手动打开已登录的WoS检索界面,在浏览器地址栏中的URL中可找到SID:

    获取SID
  2. 及时更换SID:SID是定时更新的,所以(间隔12小时或24小时以上)再次使用该项目爬取数据时,应重新查找并更换SID;

  3. 使用VPN:不在校园网IP地址内运行该项目时,需要使用VPN;如果没有使用VPN,即使SID正确,也无法爬取数据。

tomleung1996 commented 4 years ago

不在校园网的时候,使用SID也可以正常爬取。只是有时候因为防火墙等原因WOS响应速度非常慢,因此才需要代理