Python爬虫ieee paper关键字

时间:2019-02-19 15:33:44

标签: python python-3.x web-crawler

我尝试使用搜寻器来获取ieee纸关键字,但是现在出现错误 如何修复我的履带? 我的代码在这里

import requests
import json
from bs4 import BeautifulSoup
ieee_content = requests.get("http://ieeexplore.ieee.org/document/8465981", timeout=180)
soup = BeautifulSoup(ieee_content.text, 'xml')
tag = soup.find_all('script')
for i in tag[9]:
    s = json.loads(re.findall('global.document.metadata=(.*;)', i)[0].replace("'", '"').replace(";", ''))

错误在这里

Traceback (most recent call last):
  File "G:/github/爬蟲/redigg-leancloud/crawlers/sup_ieee_keywords.py", line 90, in <module>
    a.get_es_data(offset=0, size=1)
  File "G:/github/爬蟲/redigg-leancloud/crawlers/sup_ieee_keywords.py", line 53, in get_es_data
    self.get_data(link=ieee_link, esid=es_id)
  File "G:/github/爬蟲/redigg-leancloud/crawlers/sup_ieee_keywords.py", line 65, in get_data
    s = json.loads(re.findall('global.document.metadata=(.*;)', i)[0].replace(";", '').replace("'", '"'))
IndexError: list index out of range

2 个答案:

答案 0 :(得分:1)

这是另一个答案。在我的代码加载(替换)后,我不知道您在代码中使用's'做什么。

下面的代码没有引发错误,但是您再次使用's'

import requests
import json
from bs4 import BeautifulSoup

ieee_content = requests.get("http://ieeexplore.ieee.org/document/8465981", timeout=180)
soup = BeautifulSoup(ieee_content.text, 'xml')
tag = soup.find_all('script')

# i is a list
for i in tag[9]:
   metadata_format = re.compile(r'global.document.metadata=.*', re.MULTILINE)
   metadata = re.findall(metadata_format, i)
   if len(metadata) != 0:
      # convert the list 
      convert_to_json = json.dumps(metadata)
      x = json.loads(convert_to_json)
      s = x[0].replace("'", '"').replace(";", '')
      ###########################################
      # I don't know what you plan to do with 's'
      ###########################################
      print (s)

答案 1 :(得分:0)

很显然,在第65行中,i中提供的某些数据不适合您要使用的正则表达式模式。因此,您的[0]无法使用,因为返回的数据不是适当长度的数组。

解决方案:

x = json.loads(re.findall('global.document.metadata=(.*;)', i)
if x:
    s = x[0].replace("'", '"').replace(";", ''))