多的东西就不说了,我只想说一下心态以及一些常遗忘的东西。


记录一下常忘的东西,等我哪天写不动代码,就来看看

  • 一、 心态篇
  • 二、 记录篇
  • 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就是数据源