【问题标题】:list index out of range error in ScrapyScrapy中的列表索引超出范围错误
【发布时间】:2018-09-03 23:44:52
【问题描述】:

我正在尝试从微博获取用户状态,但一直出现此错误。

import re
import string
import sys
import os
import urllib
import urllib2
from bs4 import BeautifulSoup
import requests
from lxml import etree

reload(sys) 
sys.setdefaultencoding('utf-8')
if(len(sys.argv)>=2):
    user_id = (int)(sys.argv[1])
else:
    user_id = (int)(raw_input("input user_id: "))

cookie = {"Cookie": "******my cookies"}
url = 'http://weibo.cn/u/%d?filter=1&page=1'%user_id

html = requests.get(url, cookies = cookie).content
selector = etree.HTML(html)
pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])

result = "" 
urllist_set = set()
word_count = 1
image_count = 1

print 'spider is ready...'

for page in range(1,pageNum+1):

  url = 'http://weibo.cn/u/%d?filter=1&page=%d'%(user_id,page) 
  lxml = requests.get(url, cookies = cookie).content


  selector = etree.HTML(lxml)
  content = selector.xpath('//span[@class="ctt"]')
  for each in content:
    text = each.xpath('string(.)')
    if word_count>=4:
      text = "%d :"%(word_count-3) +text+"\n\n"
    else :
      text = text+"\n\n"
    result = result + text
    word_count += 1


fo = open("/Users/apple/Desktop/%s"%user_id, "wb")
fo.write(result)
word_path=os.getcwd()+'/%d'%user_id
print 'done'

错误:

File "weibo_spider.py", line 25, in <module>
    pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])
IndexError: list index out of range

【问题讨论】:

  • 您假设selector.xpath('//input[@name="mp"]') 无论如何都会匹配?这是问题。想想如果没有名称为“mp”的输入,那么如何找到它的属性?

标签: python scrapy


【解决方案1】:

您假设selector.path 总能找到一些东西,但大多数情况下并非如此。所以要养成防御性编程的习惯。见Defensive Programming

尝试替换

pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])

与:

controls = selector.xpath('//input[@name="mp"]')
if controls:
     pageNum = int(controls[0].attrib['value'])

【讨论】:

  • 嗯,我发现这个错误 pageNum = (int)control[0].attrib['value']) ^ SyntaxError: invalid syntax
  • @Lucia,你正在使用control。你拼写正确吗?在我的例子中是controls
  • 同样的错误,文件“weibo_spider.py”,第 27 行 pageNum = (int)controls[0].attrib['value']) SyntaxError: invalid syntax
  • 您在麻烦的行尾看到额外的) 吗?去掉它。或者复制我上面发布的代码。
  • 哦,很抱歉这个错误。但即使在我删除括号后它仍然弹出相同的错误:文件“weibo_spider.py”,第 27 行 pageNum = (int)controls[0].attrib['value'] ^ SyntaxError: invalid syntax
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多