是说因为各种原因打算写一下!就很简单,也没打算往深里写(
针对无基础计算机系学生的十分钟速成摸鱼特化型(笑)
比起简易教程更像知识堆积存放处()
将来有空可能再细化下具体操作步骤之类,毕业要紧,跑了跑了x
如果想要对爬虫有一个系统的了解,建议读一下这篇,有时间的话强推:
简单爬虫教程 - Zkeeer's Note
很强,也很全,看完就不用看这个了(
前置知识
一点点python语法
随便看看就好啦!A Byte of Python这本真的很好,跳过前面的废话随便看看常用语法,完全可以两小时速成python(误)
重点大概就……算了还是列一下写简易爬虫的我流重点(
- 读写文件(open,close)
- 条件判断&循环(if,while,for)
- list,dict,切片
- 异常处理(try & except),不看也成
别的就随便看看,真的就随便看看就成(
简明python教程 - 中译本
Python教程 - 廖雪峰的官方网站
一点点编码常识
很痛苦.jpg 一般在这里出错总会调试半天(。
就只要知道为什么会乱码就好!基本都是GBK和UTF-8之间的转换问题,遇到再说吧……点点点。
一点点正则表达式
很痛苦*2,但是也只能硬啃啃……差不多能写点简单的就成,保持对知识的敬畏之心(x)
不过话是这样说啦!实际搞的时候大家还不是都用BeautifulSoup(。好像也有用SimplifiedDoc的,无所谓了本质工具能用就ok(
XPath也很好,但还是按部就班先学学正则,毕竟用处比较广(
总之我把一个教程和一点工具放在这里.jpg
正则表达式30分钟入门教程v2.4.1 - deerchao
常用正则表达式v0.03 - deerchao
在线正则表达式测试 - deerchao
一点点网页小知识
计算机学生必备常识系列其之一(并没有二)
大概就,HTML基础知识&收包发包过程里都传了什么东西(。
最好有掌握一点点JS不过也无所谓啦!
辅助抓包小工具
BurpSuite给老子冲!
Web安全 — BurpSuite实战(上)- 红日安全团队 - Freebuf
……开玩笑的,狐哥,算了算了.jpg
就……火狐好多插件嘛,或者F12也可以的,反正只是看看发包内容而已……看个人喜好了(。杀鸡焉用牛刀
正文
开冲之前
很无助,但是也只能面对!总之又要学点新东西!
也不用很认真,能get能post能encoding就成(……
爬虫基本库:requests - 大千世界1998 - 简书
也不用很认真*2,用的时候再查也完全okk(
Python re模块学习 - 流年留念 - 博客园
开冲
虽然小标题这样说啦但是前面引用的链接里其实都写过爬虫实例了,很卑微(……)就简单写一下我流简易爬虫流程(。
- 简单看一下html代码
- BurpSuite抓包看看自己发的请求什么样子
- import requests / import os / import re
- 发请求,拿正则挑出来自己想要的东西
- 后期处理,看需求创建&写入文件
看到这里的话已经可以去做点练习了,大概。从这个网址开始往后两三关的样子,应该都可以做了(。
Python Challenge
需要的话可以搞搞多线程多进程啥的,大家都说windows应该用多进程但是也没搞很懂why(……)以及看到这里时期望能达到的程度如下:
# -*- coding:utf-8 -*-
'''
●getFiction v1.0
作者:Yemu
创建日期:19.5.21
最近修改时间:19.5.21
程序目的:爬个小说
'''
import requests
import os
import re
#创建文件夹
path='./qingchengtianxia/'
try:
os.makedirs(path)
except:
print("dir has been exist.")
#给目录所在网址发请求,爬小说各章节所在网址,下面这堆参数在抓的包里都能看见
url="https://www.biqushu.com/book_108570/"
cookie="Hm_lvt_9222135ee421feb6803d0f143dac6ae3=1560676121,1560681067; Hm_lpvt_9222135ee421feb6803d0f143dac6ae3=1560681067; jieqiVisitId=article_articleviews%3D108570"
headers={
"Host": "www.biqushu.com",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "max-age=0",
"Proxy-Connection": "keep-alive",
"Cookie": cookie,
"referer":"https://www.biqushu.com/book_108570/",
"If-None-Match": "1560681072|",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
}
response = requests.get(url,headers=headers)
#转码
response.encoding='gbk'
#正则
pattern = re.findall('<li><a href="(.*?)">',response.text,re.S)
#一点点处理
pattern=pattern[11:]
#创建文件并循环写入
file=open('xiaoshuo2.txt','a')
for i in pattern:
#获取每一章的具体网址
url2=url+i
#发请求ry
response = requests.get(url2,headers=headers)
response.encoding='gbk'
title = re.findall('<h1>(.*?)</h1>',response.text,re.S)
txt = re.findall('精彩小说无弹窗免费阅读!<br><br>(.*?)</div>',response.text,re.S)
#连接字符串&去除不必要字符
text=title[0]+'\n'+txt[0].replace(' ','').replace(' ','').replace('\n','').replace('\r','\n').replace('<br/>','')+'\n'
file.write(text)
#print(title[0],'done')
print('done')
结语
总之速成的摸鱼特化型就是这样了,大概从python零基础到完成也就三小时(x
想要写得好一点可以看看拓展阅读或者自己再去搜一搜之类=D
最后放一个很古老的鱼,以证清白 写散装代码误人子弟(。
# -*- coding:utf-8 -*-
'''
●A Crawler for Rengoku-teien v0.5
Author: Yemu
Create date: 18.9.4
爬取炼狱庭园的曲子及曲子简介并自动解压
'''
import requests
import re
import os
from zipfile import ZipFile
import multiprocessing
def dl(url,text,path):
print("--------------------------------------")
print("[+]connecting now...")
if not os.path.exists("./songs/"+path+'/'+text[0]):
os.makedirs("./songs/"+path+'/'+text[0])
try:
file_name="./songs/"+path+'/'+text[0]+"/"+text[0]+".txt"
f = open(file_name, 'w')
f.write(text[0]+text[1])
f.close()
print("[+]save profile successfully")
except Exception as e:
print("[-]write profile failed,",e)
f=open("error.txt",'a')
f.write("[-]write "+text[0]+" profile failed\n")
f,close
download_url=re.findall('<td class="songicon"><a href="(.*?)">',text[2],re.S)
download_url=url+download_url[0]
print(download_url)
source2=requests.get(download_url)
source2.encoding='utf-8'
try:
zip_name="./songs/"+path+'/'+text[0]+"/"+text[0]+".zip"
f2 = open(zip_name, 'wb')
f2.write(source2.content)
f2.close()
print("[+]save "+text[0]+".zip successfully")
except Exception as e:
print("[-]save zip failed,",e)
f=open("error.txt",'a')
f.write("[-]save "+text[0]+" zip failed\n")
f,close
print("[+]extracting now...")
try:
extract_zip(text[0])
except Exception as e:
print("[-]extract failed,",e)
f=open("error.txt",'a')
f.write("[-]extract "+text[0]+" zip failed\n")
f,close
def extract_zip(text):
file_name="./songs/"+text+"/"+text+".zip"
path="./songs/"+text
with ZipFile(file_name, 'r') as zip_file:
zip_file.extractall(path)
print("[+]done")
def download_zip(source):
link=[]
pattern = re.findall('<div class="song">(.*?)</table>',source.text,re.S)
for i in pattern:
song_text=re.findall('<p>(.*?)</td>',i,re.S)
bio=song_text[0].replace("<br>","\n").split("</p>")
bio+=[i]
link.append(bio)
return link
if __name__=='__main__':
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36','Accept-Encoding':'gzip'}
url_list=["punk","pop","wafu"]
url = 'http://www.rengoku-teien.com/mp3/'
for k in url_list:
realurl=url+k+'.html'
source=requests.get(realurl,headers=headers)
source.encoding='utf-8'
all_link=download_zip(source)
print("[+]get all links")
pool = multiprocessing.Pool(multiprocessing.cpu_count())
for i in all_link:
pool.apply_async(dl, (url,i,k, ))
# pool.map(detailPage, urls)
pool.close()
pool.join()
print("--------------------------------------")
print("[+]finished")
以上!感谢观看!
拓展阅读
- Beautiful Soup 4.4.0 文档
- 与BeautifulSoup一样强的SimplifiedDoc,专为html抽取而生 - 博客园
- 爬虫解析库:XPath - 大千世界1998 - 简书
网友评论