2015-09-06 2 views
1

может кто-то указать мне, что я делаю неправильно?Как извлечь данные с веб-страницы с помощью python

Enter Item name:Rockfish Traceback (most recent call last): File "C:\Users\partn_000\Desktop\sarvesh\Python Source Code\working\jellyneoscraper.py", line 45, in search(br, ITEMNAME) File "C:\Users\partn_000\Desktop\sarvesh\Python Source Code\working\jellyneoscraper.py", line 33, in search increment = increment[0] IndexError: list index out of range

Это код, который я написал

#Library Imports 
import mechanize 
import cookielib 
import re 
import sys 
import time 
import os.path 
from operator import itemgetter 
import ctypes 
ctypes.windll.kernel32.SetConsoleTitleA("test") 


def init_browser(): 
    br = mechanize.Browser() 
    br.set_handle_equiv(True) 
    br.set_handle_redirect(True) 
    br.set_handle_referer(True) 
    br.set_handle_robots(False) 
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
    br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36')] 
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) 

    return br 


def search(br, ITEMNAME): 
    datapage = br.open('http://items.jellyneo.net/index.php?go=show_items&name=' +ITEMNAME +'&name_type=exact&desc=&cat=0&specialcat=0&status=0&rarity=0&sortby=name&numitems=20') 
    f = open('search.html', 'w') 
    f.write(datapage.read()) 
    f.close() 
    value = re.findall('style="font-weight:bold;">(.+) NP</a></td>"',datapage.read()) #(.+) is replaced in place of required value 
    value = value[0].replace(",","") 
    value = int(value) 
    print value 
#http://items.jellyneo.net/index.php?go=show_items&name=Rockfish&name_type=exact&desc=&cat=0&specialcat=0&status=0&rarity=0&sortby=name&numitems=20 


#('style="font-weight:bold;"> (.+) NP</a>"',search.read()) 


ITEMNAME = raw_input('Enter Item name:eg. Rockfish') 

br = init_browser() 
search(br, ITEMNAME) 

ответ

1

в методе поиска вы читали всю страницу и сохранить его в файл, затем вы пытаетесь перечитывать йо выполнить ваше регулярное выражение, но вы уже в конце страницы, чтобы он возвращал пустую строку. вы должны добавить datapage.seek (0), прежде чем читать его следующим образом:

datapage = br.open('http://items.jellyneo.net/index.php?go=show_items&name=' +ITEMNAME +'&name_type=exact&desc=&cat=0&specialcat=0&status=0&rarity=0&sortby=name&numitems=20') 
f = open('search.html', 'w') 
f.write(datapage.read()) 
f.close() 
datapage.seek(0) 
value = re.findall('style="font-weight:bold;">(.+) NP</a></td>"',datapage.read()) #(.+) is replaced in place of required value 
value = value[0].replace(",","") 
value = int(value) 
Смежные вопросы