-
概述
这份代码模拟网络爬虫工作流程的的
前端扩展(frontier extension)
部分。我们的目标是从4399域名下的一个URL: http://www.4399.com/flash/1.htm 开始,爬取N条游戏的基本信息(包括名称、分类、专题、时间、简介)等。这份代码使用的语言为Python (3.7),扩展部分的主要思路是队列+广度优先搜索,前端解析部分使用常用库requests, Beautiful Soup, re等,解析到的数据用pandas存进excel文件,进一步可以和建立数据库对接。 -
实现部分
包括
funcs.py
和modules.py
两个版本,前者是脚本式的,后者是函数模块式的。 -
技术收获
-
python队列不是基础类型,使用时需要
from queue import Queue
- 构造函数可传入数字指定队列大小上限
get(), put()
为基本使用方法- 其他属性或方法有
qsize(), maxsize, empty(), queue()
等
-
前端匹配
find(name='div',attrs={'class':'name'})
- soup的
find()
可以级联,返回类型为bs4.element.Tag
findAll()
同理,返回Tag
的列表- 别忘记正则库
re.findall()
。他还有用大括号提取匹配内容的能力,但是我没有用到。http://www.cppcns.com/jiaoben/python/172301.html
- soup的
-
数据处理
df.to_excel(path)
-
#新建时指定列名 df = pd.DataFrame( columns = ['g_tit','g_cls','g_size','g_date','g_spe','g_intro'] )
-
#添加行,需要赋值,相当于inplace #添加内容用字典列表表示,可以添加多条记录 df = df.append([g_dict],ignore_index=True)
-
-
Spyder的使用:preference选择editor
- 调整显示空格符号与否
- 调整tab是否总是缩进(不要选,经常用来自动补全)
- 设置单击后高亮的延迟时间
- 设置缩进等于几个空格
- 设置是否用空格代替缩进(建议是,4个空格=1个indent)
- 还有黑色皮肤
- 可以ctrl+Enter部分代码解释执行,方便调试
- ipdb调试时使用ctrl+shift+c进行复制
-
4.知识收获
-
复习python的参数传递
def outfunc(): x = 0 qq = Queue() infunc(x,qq) print(x) print(qq.queue) return def infunc(a,q): q.put(a) a+=4 print(' '*a + 'a=' + str(a)) print(' '*a + 'q=' + str(q.queue)) if a==12: return else: infunc(a,q)
In [27]:outfunc() a=4 q=deque([0]) a=8 q=deque([0, 4]) a=12 q=deque([0, 4, 8]) 0 deque([0, 4, 8]) #========================= #不可变/基础类型 值传递 #可变/类 引用传递 #Integer 代替 int 实现引用传递。未测试
-
http协议的编码规则https://www.cnblogs.com/xdouby/p/8308915.html
在消息头指定Content-Type