多的东西就不说了,我只想说一下心态以及一些常遗忘的东西。
记录一下常忘的东西,等我哪天写不动代码,就来看看
- 一、 心态篇
- 二、 记录篇
- 1)在样式下获取a标签的href
- 2)如果遇到框架样式,无法爬取?
- 3)判断文件是否存在,如果不存在创建
- 4)Json类型的处理
- (1)Json加载
- (2)Json文件写入
- (3)Json文件读取
- 4)数据下载
一、 心态篇
一开始我觉得这种什么小白逆袭这种肯定很基础,我已经玩python玩了一年多,觉得一定能轻松搞定它的任务,抱着玩玩的心态就参加了。直到第二天的课程,我崩溃了。爬虫,我玩了整整一年的爬虫,竟然在面对只是简单爬取图片的问题时,竟然还是弄一下午还没有搞定。归根究底是两个原因,一是自己基础不扎实,回想起以往,都是照搬,然后调试,然后觉得懂了,或者看着视频码代码,搞懂,就完了。同质化的东西并没有做到炉火纯青,没有及时总结。二是还是太急于求成,一遇到bug,首先想的是马上试错解决,并没有再次往上求索,看是否请求路径错了,而不是只是框架语法错误;经过这次,我需要摆正心态,时刻保持谦逊的心态去对待每一份代码。
二、 记录篇
爬虫,大家都很熟悉,我就不多讲了。但是总是会遇到同质化问题,如下所示:
1)在样式下获取a标签的href
网上出了很多招,有用xpath的,有直接全局遍历的,但我认为简单即为高效。
from bs4 import BeautifulSoup
#在对应的div下获取a标签
all_tds[0].find('a').get('href')
#获取标签下的文本
all_tds[6].find('a').text
注意:all_tds[0]是通过beautifulSoup搜索出来的结果,他的数据类型是resultSet,才有get这个方法>
2)如果遇到框架样式,无法爬取?
bs=BeautifulSoup(response.text,'lxml')
pic_list_html=bs.select('.pic-list img')
这看简单的select,它可以克服你直接用这一句所带来的困惑
bs=BeautifulSoup(response.text,'lxml')
pic_list_html=bs.find_all('div',{'class':'pic-list'})
如果用这一句,返回的就是none
如果想定位某一块网页样式数据,也可以往上找对应的模块来定位
tables=soup.find_all('table',{'class':'table-view log-set-param'})
for table in tables:
table_titles=table.find_previous('div').find_all('h3')
3)判断文件是否存在,如果不存在创建
这个问题非常常见,但是每次用完,马上忘记,快如金鱼
if not os.path.exist('data/'):
os.makedirs(data)
4)Json类型的处理
这个问题几乎成为我搜索的高频词
(1)Json加载
这个的作用是用来将字符串类型,但是看起来很像字典的东西转成json格式,也就是字典啦
json_data=json.loads(str(stars).replace('\'','\"'))
#顺手做一个数据清洗
(2)Json文件写入
这里就是将第一步写生成的json格式的东西变成真正的json文件
with open('data/'+name+'.json','w',encoding='UTF-8') as f:
json.dump(json_data,f,ensure_ascii=False)
这里的dump,就是写入json的一种方法,你可以理解成把文件塞进去,文件是json_data,塞入的钥匙是f
(3)Json文件读取
with open('data/'+name+'.json','r',encoding='UTF-8') as f:
json_array=json.loads(f.read())
4)数据下载
这里其实原理和json文件写入真的很像
这是刚刚写过的json文件写入
with open('data/'+name+'.json','w',encoding='UTF-8') as f:
json.dump(json_data,f,ensure_ascii=False)
这是下载文件的代码
pic=requests.get(pic_url,timeout=15)
name=abc.jpg
with open(name,'wb') as f:
f.write(pic.content) #pic就是数据源