目标
项目 | 内容 | 难度 |
---|---|---|
正则表达式 | 抓大放小方法论, .*?非贪婪模式, 字符/数字/格式匹配 | 4❤ |
文件读写 | txt,csv, pdf读写, 读写的数据结构如字典列表等等,pdf最难,公式读取是顽疾 | 3❤ |
爬虫主体 | 半自动(已知网页源码),全自动 (自动获取源码并爬取内容) | 5❤ |
实施
半自动爬虫实例
1 数据:
随便找个网页,贴吧,论坛,搜索词条等
随便找的百度贴吧页面链接
右击,选中源码,然后dump下来存为source.txt
2 源码:
import csv
import re
# 1 输入模块: 网页存txt打开作为被匹配源
f = open('source.txt')
source = f.read()
#print(source) #UT-mode
# 2 正则匹配模块,爬虫的核心:抓大放小,找到楼层》用户名,内容,日期
floor = re.findall('<li class="d_name" data-field=\'(.*?)<li class="d_nameplate">', source, re.S)
#print(floor[0])
dic_ls = []
for fr in floor:
dic = {}
dic['name'] = re.findall( 'target=.*?>(.*?)<', fr, re.S)[0]
dic['content'] = re.findall('j_d_post_content .*? style="display:;">(.*?)<', fr, re.S)[0].strip()
dic['time'] = re.findall(':"(\d{4}-\d{2}-\d{2})', fr, re.S)[0].strip()
dic_ls.append(dic)
f.close()
# 3 输出为csv文件: fields, item;
fout = open('BBS.csv','w')
writer = csv.DictWriter(fout,['name', 'content', 'time'])
writer.writeheader()
writer.writerows(dic_ls)
fout.close()
- 输入模块-〉正则匹配-》输出组织;
- 最难的是正则匹配,活用(.*?)和特殊结构<, html字段等等;
- re.S 表示适用正则模块的匹配规则,支付串全部string参与匹配(而非默认的第一行参与匹配)
爬取基本流程
读取header>> 网址处理 >>匹配正则>> 输出组织
风险注意
法律道德风险
- 不要做危机站点运行的爬取行为:太频繁,爬取密码等
- 注意知识产权保护和侵权
- 在职项目注意信息违规
down ppt,doc资料神器
# 自动下载Download链接
wb = openpyxl.load_workbook(file)
ws = wb.get_sheet_by_name(sh_name)
for i in range(2, m): #m
lk = ws.cell(i, Download_Col + 1).hyperlink
if lk:
webbrowser.open(lk.target)