这个次实战,初步是在模仿星主的代码。遇到的问题如下
一、网页编码问题
开始利用requests获取网页编码获取的是“iso-8859-1”,百度‘iso-8859-1’转utf-8
html = html_page.encode('unicode').decode('iso-8859-1').encode('utf-8')
报错,
不得已,百度python判断网页编码的方式
方法一:使用urllib模块的getparam方法
1 import urllib
2 #autor:pythontab.com
3 fopen1 = urllib.urlopen('http://www.51job.com').info()
4 print fopen1.getparam('charset')# 51job
报错
IOError: [Errno socket error] EOF occurred in violation of protocol (_ssl.c:661)
方法二:使用chardet模块
# coding:utf-8
import chardet
import urllib
#先获取网页内容
data1 = urllib.urlopen('http://www.51job.com').read()
#用chardet进行内容分析
chardit1 = chardet.detect(data1)
print chardit1['encoding'] # 51job
报错
有点绝望,请教星球球友没有解决,但是激励我还是坚持下去了。
最后直接F12查看header,charset=‘gbk’我是瞬间无语了。百度GBK转UTF-8
方法是先转‘iso-8859-1’再转UTF-8,成功转码问题解决
html = html_page.encode('iso-8859-1').decode('gbk')
二、取值问题
在插入excel后,我发现从第四行开始插入。查找问题
1、发现xpath路径
第一个数据路径://[@id="resultList"]/div[4]/p/span/a
第二个数据路径://[@id="resultList"]/div[5]/p/span/a
问题出来了,DIV[4]第一个数据,DIV[5]第二元素。xpath路径修改成//*[@id="resultList"]/div/p/span/a,抓取前三个数据。2个空数据,第三个把标题抓进来了
初步解决问题的方法是如若从DIV[4]开始抓取,能力有限,没有找到解决的方法。如何处理空结果。
放弃
三、抓取数据出现空格
取值空格再次请教球友,推荐了函数normalize-space,当时欣喜若狂。
normalize-space函数
返回去掉了前导、尾随和重复的空白的参数字符串
备注
通过去掉前导和尾随空白并使用单个空格替换一系列空白字符,使空白标准化。如果省略了该参数,上下文节点的字符串值将标准化并返回。以下函数调用返回“abc def”,normalize-space(" abc def ")。如果参数不是字符串类型,将先使用 string() 函数转换为字符串,然后计算该转换的结果。
还是没有搞懂
normalize-space(" abc def "),用路径替换abc def。显然不行。运行报错。
最后将[normalize-space()]加在text()后(参考的外文网站)结果返回的是空!没错就是空。
好吧我放弃。
总结
第一模仿大佬的代码,在excel文件里看到了抓取的数据,当时热泪盈眶。毕竟坚持了看到了希望。之后出现的这三个大大的问题,几乎击垮了我的学习自信。在和球友@juma交流的过程中,他还是在校生,接触python三个月的样子开始实战。这对我是不小的震撼。5月6号。问题还在,但是我已经不好意思去问大家了。我从开始就随寒大学习,中途几次放弃。谢谢寒大给我的信心,今年快31岁了,我在想编程还能继续作为我的兴趣吗?在python绿色通道大家庭里我感到了热情,友好。谢谢@逆水寒大佬,谢谢大家。整理整理思绪,好好打打基础去吧。
网友评论