最近在爬取每个网站的数据,出现:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误,具体报错如下:
我知道原因是json编码错误,我要编码的变量是html变量,代码如下(打印的部分代码已加粗):
#coding=utf8
import requests
import time
from queue import Queue
from threading import Thread
import json
from queue import Queue
from bs4 import BeautifulSoup
class NameThread(object):
def __init__(self):
self.url='https://www.haodf.com/faculty/DE4roiYGYZwmGno-DwIIFQwlR/menzhen_{}.htm'
self.headers={'User-Agent':'Mozilla/5.0'}
self.q=Queue()
self.i=0
def url_in(self):
for page in range(14):
url=self.url.format(str(page))
#入队列;
self.q.put(url)
def get_data(self):
while True:
if not self.q.empty():
url=self.q.get()
html=requests.get(
url,
headers=self.headers
).text
**print(html)**
**html=json.loads(html)**
# table_data = [[cell.text for cell in row("td")]
# for row in BeautifulSoup(html.content)("li")]
# print(json.dumps(dict(table_data)))
# res=json.loads(html,strict=False)
# res = json.loads(html.decode(encoding='utf-8'))
# res=json.loads(html)
# print(res)
for app in html['data']:
#应用名称:
doctor_name=app['title']
d={
'医生姓名':doctor_name,
}
print(d)
self.i+=1
else:
break
def main(self):
#入队列:
self.url_in()
t_list=[]
for i in range(10):
t=Thread(target=self.get_data)
t_list.append(t)
t.start()
# 回收线程
for i in t_list:
i.join()
print(self.i)
if __name__=="__main__":
begin=time.time()
NameThread().main()
end=time.time()
print("页面抓取完成的时间是%s"%(end-begin))
打印结果如下:
打印的内容实则是一个html页面,那么我用什么方法可以把html转化成json数据格式呢,各位小伙伴有知道的吗?欢迎大家留言互动!