问题遇到的现象和发生背景
跟着教程爬股票信息,显示TypeError
问题相关代码,请勿粘贴截图
import requests
import re
from bs4 import BeautifulSoup
import traceback
def getHTMLText():
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def getStockList(lst, stockURL):#获得股票列表
html = getHTMLText(stockURL)
soup = BeautifulSoup(html, 'html.parser')
a = soup.find_all('a')
for i in a:
try:
href = i.attrs['href']
lst.append(re.findall(r"[s][hz]\d{6}", href)[0]) #以s开头,中间是h(上海股市)或z(深圳股市)字符
except:
continue
def getStockInfo(lst, stockURL, fpath):
for stock in lst:
url = stockURL + stock + ".html"
html = getHTMLText(url)
try:
if html == "":
continue
infoDict = {} #定义字典
soup = BeautifulSoup(html, 'html.parser') #用bs库构建一个解析网页的类型
stockInfo = soup.find('div', attrs={'class':'stock-bets'}) #所有的股票信息都封存在div标签中,进一步在标签中查找的第一个内容是股票名称,它封装在bets-name的属性的对应的标签内
name = stockInfo.find_all(attrs={'class':'bets-name'})[0]
infoDict.update({'股票名称':name.text.split()[0]}) #使用split函数来获得股票对应名称的完整部分
#所有的股票信息都存储在dd和dt的标签中,dt标签是表明属性信息的键的域,dd标签表明的是股票信息的值的域。可以用findall的方法找到所有的键的区域和所有值的区域
keyList = stockInfo.find_all('dt')
valueList = stockInfo.find_all('dd')
#下面对键值对列表赋值,将它们对还原为键值对并存在字典中
for i in range(len(keyList)):
key = keyList[i].text
val = valueList[i].text
infoDict[key] = val
#保存文件
with open(fpath, 'a', encoding='utf-8') as f:
f.write(str(infoDict) + '\n')
except:
traceback.print_exc()
continue
def main():
stock_list_url = 'http://quote.eastmoney.com/stocklist.html' #股票链接
stock_info_url = 'https://gupiao.baidu.com/stock/' #获取股票链接的主体部分
outpuut_file = 'E://BaiduStockInfo.txt' #保存在E盘的根目录下
slist = []
getStockList(slist, stock_list_url)#获取股票列表
getStockInfo(slist, stock_info_url, outpuut_file)#将获取到的信息存储在相关文件中
main()
运行结果及报错内容
TypeError: getHTMLText() takes 0 positional arguments but 1 was given
我的解答思路和尝试过的方法
我想要达到的结果