报错:库的依赖包
ImportError: Missing optional dependency 'lxml'
ImportError: Missing optional dependency 'openpyxl'
解决方法:
当使用pandas处理数据保存到excel表格时,出现了一系列包缺失的错误。
其中lxml是为了解析html文本,虽然前面已经用了bs4库解析了,但是到这里还是要提示装这个库,不知道为什么;openpyxl是pandas在读取xls文件时的阅读引擎,这个一旦不安装最后保存到文件那一步一定会出错。
df=pd.DataFrame(all_lst,columns=['xx1','xx2])
df.to_excel('xxx.xlsx',index=False,engine='openpyxl')
openpyxl的安装同上
报错:字典键值
keyerror:xxx
解决方法:
在将爬虫数据存入数据库时,刚开始可以正常爬取,中间会突然停止报错,是因为出现了空值的情况,所以要异常捕捉。
try:
xxx
except:
pass
报错:数据库字符串
Incorrect string value: ‘\xE8\xB5\xB5\xE9\x9B\xB7‘
解决方法:
这是因为字符编码错误,所以首先查看数据表的字符集编码,红框部分
show create table mytable;
以上是我修改后的数据表mytable的字符编码,而且我还修改了数据表字段的字符编码,之前每行的字段编码都是latin(现在改utf8后不显示了),用以下命令进行修改:
alter table Student change xxx xxx varchar(10) character set utf8;
其中的xxx是data、max_temp等标头信息,必须要像以上示例指令一样连着输两遍!!修改后像上图一样(没错,就是上图,因为我全改了才截图的)就成功了!
报错:函数/方法无返回值
TypeError: 'NoneType' object is not callable
解决方法:
title=article.find('a',class_="post-item-title").get_text()
我看到网上的解决方式是因为调用的函数或方法不传参就不用加括号,试了不行;最后仔细看了一遍代码,是因为方法名拼写错误(find写错),所以导致无返回值
一些学到的其他知识点:
ajax是什么?有什么用?
ajax是实现服务器端和客户端进行异步通信,能够让我们得到异步加载的数据。
我认为在爬虫遇到post请求时,然后发现是后台异步加载,什么参数都不从url上面直接体现,这时便用到了ajax 。
什么是loadpostlist函数?
不是自带函数,是自定义的事件函数,它是指列表内容加载到内存中的形式。对它的理解还是太模糊!!!
json.dumps()函数?
按照之前的做法,伪装浏览器给网站发送请求,有url、headers、datas但是还是返回4xx的状态码。
resp=requests.post(url,parmas=data,headers=headers)
点开下图中的红框中的链接,发现data已被转成json类型。
以上查看了data的编码方式,原来已经转成了json,所以要利用json.jumps()方法将python对象编码成Json字符串。即可解决问题,注意参数headers必须放在最后一个位置上!
resp=requests.post(url,json.dumps(data),headers=headers)