狍子大概看得懂的简易爬虫教程

是说因为各种原因打算写一下!就很简单,也没打算往深里写(
针对无基础计算机系学生的十分钟速成摸鱼特化型(笑)
比起简易教程更像知识堆积存放处()
将来有空可能再细化下具体操作步骤之类,毕业要紧,跑了跑了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下推荐多进程,具体原因可以参考 Python爬虫是用多线程还是多进程-Jayj1997-CSDNPython爬虫的多线程与多进程的使用场景-NeverLate_gogogo-CSDN

任何Python线程执行前,必须先获得GIL锁。

  • 在Python2.x里,GIL的释放逻辑是当前线程遇见IO操作或者ticks计数达到100(ticks可以看作是Python自身的一个计数器,专门做用于GIL,每次释放后归零,这个计数可以通过 sys.setcheckinterval 来调整),进行释放。
  • 而在python3.x中,GIL不使用ticks计数,改为使用计时器(执行时间达到阈值后,当前线程释放GIL),这样对CPU密集型程序更加友好,但依然没有解决GIL导致的同一时间只能执行一个线程的问题,所以效率依然不尽如人意。

就是比如你想计算 从0依次+1 到一百万要多少时间,对比单线程和两线程,期望得到比单线程快一倍的速度,使用了之后发现不仅不快而且更慢了,因为GIL锁的存在,两(多)个线程同时只能运行一个,所以就是线程1运行了一会,然后线程2运行,且只能在一个核心上运行。
但是多进程就没有这方面的顾虑,一个进程使用一个解释器,一个解释器一把锁,所以多个线程就是多把不互相干预的锁,运行起来就能得到期望的速度,当然你有几个核心就最多在Pool里放几个进程。

以及看到这里时期望能达到的程度如下:

# -*- 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('&nbsp;','').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")

以上!感谢观看!

拓展阅读





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容