2015-09-26 13 views
0

Я добавил несколько строк кода в свою программу, чтобы преобразовать html в json, используя BeautifulSoup, но получив ошибку для этих добавленных строк кода.TypeError: объект 'str' не является вызываемым

import httplib, urllib 
from bs4 import BeautifulSoup 
import json 

params = urllib.urlencode({'cmm': 'onion', 'mkt': '', 'search': ''}) 
headers = {'Cookie': 'ASPSESSIONIDCCRBQBBS=KKLPJPKCHLACHBKKJONGLPHE; ASP.NET_SessionId=kvxhkhqmjnauyz55ult4hx55; ASPSESSIONIDAASBRBAS=IEJPJLHDEKFKAMOENFOAPNIM','Origin': 'http://agmarknet.nic.in', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-GB,en-US;q=0.8,en;q=0.6','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Cache-Control': 'max-age=0','Referer': 'http://agmarknet.nic.in/mark2_new.asp','Connection': 'keep-alive'} 
conn = httplib.HTTPConnection("agmarknet.nic.in") 
conn.request("POST", "/SearchCmmMkt.asp", params, headers) 
response = conn.getresponse() 
print response.status, response.reason 
data = response.read() 
htmldata = [[cell.text for cell in row("td")]for row in BeautifulSoup((data)("tr"),"lxml")] 
x = json.dumps(dict(htmldata)) 
print x 

Я получаю сообщение об ошибке, как

Traceback (most recent call last): 
    File "commodity.py", line 12, in <module> 
    data1 = [[cell.text for cell in row("td")]for row in BeautifulSoup((data)("tr"),"lxml")] 
TypeError: 'str' object is not callable`enter code here` 

на выполнение кода. Может ли кто-нибудь сказать мне правильный подход для устранения этой ошибки.

+1

Что вы ожидаете 'BeautifulSoup ((данные) ("TR"), "LXML") 'делать? '(data) (" tr ")' пытается вызвать строку 'data'. –

+0

https://docs.python.org/2/library/httplib.html#httplib.HTTPResponse.read – Alik

+0

Переменная «data1», показанная в ошибке, позже была заменена как «htmldata». Так это y, существует несоответствие в имя переменной переменной и имя переменной кода, но это не имеет никакого значения здесь, как это было сделано позже только для тестирования. – user3932077

ответ

1

Вы пытаетесь «называть» строкой здесь:

BeautifulSoup((data)("tr"),"lxml") 

(data) является строкой, и (data)("tr") призыв к строке.

Может быть, вы хотите найти все <tr> элементы:

BeautifulSoup(data, "lxml").find_all("tr") 

делает полное заявление:

htmldata = [[cell.text for cell in row("td")] for row in BeautifulSoup(data, "lxml").find_all("tr")] 
Смежные вопросы