Python爬虫简单入门及小技巧

刚刚申请博客,内心激动万分。于是为了扩充一下分类,随便一个随笔,也为了怕忘记新学的东西由于博主十分怠惰,所以本文并不包含安装python(以及各种模块)和python语法。

目标

前几天上B站时看到一部很好玩的番剧,名字《笨女孩》,实际上是由同名的搞笑向漫画动画化的。大家都知道动画一般一周一更,很难满足我们的需求,所以我们就来编写一个爬虫,来爬取漫画咯。

那么本文的目标就是爬取《初音MIX》这部漫画(因为笨女孩我已经爬取过了>_<)。这部漫画我记得是小学的时候看的,也是我第一次接触日漫。

网上有很多的漫画网站,我们就选漫画之家好了!

需要的模块

request     用于下载网页

re       python自带的正则模块

BeautifulSoup  用于解析html,让我们查找元素更方便(不过这次没用上)

开始!

Step1:确定需要爬取的网页地址

熟练运用网站的搜索工具,进入检索页面http://manhua.dmzj.com/tags/search.shtml?s=初音Mix

我们找到了目标地址http://manhua.dmzj.com/chuyinmix

接下来打开CH001,看到我们要爬取的图片

对图片网页进行分析(F12打开自带工具),以便我们查出图片的链接

很快查到图片链接及链接在代码中的位置

但是当我们查看源代码时,并没有找到此标签

因为爬虫爬取的页面是静态的html文件,没有经过其他脚本的“加工”。所以动态的脚本之类是无法作用的(PhantomJS,Selenium之类除外)。但是作为爬虫入门文章,我们还是考虑“绕过”这种烦人的东西,“绕过”方法作为一个小技巧

技巧一:若爬取网页较困难时,尝试爬取手机网页

很轻松的找到手机的检索地址http://m.dmzj.com/search/初音mix.html

它的界面是这样的

(手机上的网站在电脑上看真low。。。)

很轻松的找到详细页面http://m.dmzj.com/info/chuyinmix.html

这时再打开CH001,查看网页源代码,找到这么一段

mReader.initData({"id":12777,"comic_id":6132,"chapter_name":"CH001","chapter_order":10,"createtime":1284436621,"folder":"c\/\u521d\u97f3MIKU\/CH001","page_url":["https:\/\/images.dmzj.com\/c\/\u521d\u97f3MIKU\/CH001\/001.jpg","https:\/\/images.dmzj.com\/c\/\u521d\u97f3MIKU\/CH001\/002.png", ...

这么明显的地址,真的是毫无防备。。。

那么我们找到了图片位置,可以开始爬取了

Step2:从检索页面到详细页面再到图片页面,进行爬取

通过简单的操作得到python代码

 1 #!usr/bin/env python
 2 #coding=utf-8
 3 import requests, re
 4 from bs4 import BeautifulSoup
 5
 6 headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
 7     "Referer":"http://m.dmzj.com/"}
 8 url="http://m.dmzj.com/info/chuyinmix.html"
 9 html=requests.get(url, headers=headers)
10 soup=BeautifulSoup(html.content, "lxml")
11 print(soup.prettify())

这里简单的介绍一下最常见的,最基础的,同时也最容易被绕过的反爬虫操作

在Http协议中,客户端通过发送Http请求头来请求网页。

在python等程序或脚本发送的请求头中user-agent并非像浏览器的一样,他们就像是“python-requests/2.14.2”。

而一般浏览器的user-agent就像“Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0”。

这样服务器就可以通过user-agent来区别爬虫和浏览器。

但是我们也可以通过修改请求头来绕过,然而服务器也不傻,他们又顺便检查了请求头Referer这一项。

Referer指的是浏览器通过哪一页面打开当前页面。

就像通过百度搜索“初音我老婆”,任意点开一个页面时Referer就记录着百度搜索结果的页面地址。

当然我们也可以修改Referer呵呵。

运行后可以看到此页面的源代码。

这时通过正则表达式来查找所需内容。

#!usr/bin/env python
#coding=utf-8
import requests, re

headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
    "Referer":"http://m.dmzj.com/"}
urlRoot="http://m.dmzj.com/info/chuyinmix.html"
urlPre="http://m.dmzj.com/view/6132/"
html=requests.get(urlRoot, headers=headers)
nameList=re.findall(‘(?<=chapter_name":")[^"]+‘, html.text);
idList=re.findall(‘(?<="id":)[^,]+‘, html.text);
for i in range(15):
    url=urlPre+idList[i]+".html"
    html=requests.get(url, headers=headers)
    print(html.text)

运行结果显示没问题,于是开始尝试爬取一张图片

 1 #!usr/bin/env python
 2 #coding=utf-8
 3 import requests, re, os
 4
 5 headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
 6     "Referer":"http://m.dmzj.com/"}
 7 urlRoot="http://m.dmzj.com/info/chuyinmix.html"
 8 urlPre="http://m.dmzj.com/view/6132/"
 9 html=requests.get(urlRoot, headers=headers)
10 nameList=re.findall(‘(?<=chapter_name":")[^"]+‘, html.text);
11 idList=re.findall(‘(?<="id":)[^,]+‘, html.text);
12 for i in range(15):
13     url=urlPre+idList[i]+".html"
14     html=requests.get(url, headers=headers)
15     print(html.text)
16     urlList=re.findall(‘https:\\\\/\\\\/[^"]+‘, html.text)
17     for idx, string in enumerate(urlList):
18         img=requests.get(string.replace(r"\/", "/").encode().decode("unicode-escape"), headers=headers)
19         ext=string.split(".")[-1]
20         if not os.path.exists(nameList[i]):
21             os.mkdir(nameList[i])
22         file=open(nameList[i]+"\%03d.%s"%(idx, ext), "ab")
23         file.write(img.content)
24         file.close()
25         break
26     break

技巧二:利用str.encode().decode("unicode-escape")转换url中的Unicode编码看来成功了呵呵 >_<

于是放开手脚,全部爬取

 1 #!usr/bin/env python
 2 #coding=utf-8
 3 import requests, re, os
 4
 5 headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
 6     "Referer":"http://m.dmzj.com/"}
 7 urlRoot="http://m.dmzj.com/info/chuyinmix.html"
 8 urlPre="http://m.dmzj.com/view/6132/"
 9 html=requests.get(urlRoot, headers=headers)
10 nameList=re.findall(‘(?<=chapter_name":")[^"]+‘, html.text);
11 idList=re.findall(‘(?<="id":)[^,]+‘, html.text);
12 for i in range(15):
13     url=urlPre+idList[i]+".html"
14     html=requests.get(url, headers=headers)
15     urlList=re.findall(‘https:\\\\/\\\\/[^"]+‘, html.text)
16     for idx, string in enumerate(urlList):
17         img=requests.get(string.replace(r"\/", "/").encode().decode("unicode-escape"), headers=headers)
18         ext=string.split(".")[-1]
19         if not os.path.exists(nameList[i]):
20             os.mkdir(nameList[i])
21         file=open(nameList[i]+"\%03d.%s"%(idx, ext), "ab")
22         file.write(img.content)
23         file.close()

一分钟后,爬取成功>_<

总结本次爬取简单使用了python的requests, re, os库,简单介绍了HTTP请求头和最常见的反爬虫机制,纯属娱乐凑文章哈哈

时间: 2024-07-31 18:09:40

Python爬虫简单入门及小技巧的相关文章

转载:用python爬虫抓站的一些技巧总结

原文链接:http://www.pythonclub.org/python-network-application/observer-spider 原文的名称虽然用了<用python爬虫抓站的一些技巧总结>但是,这些技巧不仅仅只有使用python的开发可以借鉴,我看到这篇文章的时候也在回忆自己做爬虫的过程中也用了这些方法,只是当时没有系统的总结而已,谨以此文为鉴,为以前的爬虫程序做一个总结. 转载原文如下: 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,

python爬虫-基础入门-爬取整个网站《3》

python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python2.x 使用类库: >> urllib 库 >> urllib2 库 python3.x 使用的类库: >> urllib 库 变化: -> 在python2.x中使用import urllib2 ----- 对应的,在python3.x 中会使用import url

python爬虫小小白入门

python爬虫小小白入门 学习目标: 爬虫基本思想 python爬虫常用包,官方文档,用途,安装方法,常用方法. 简单爬虫实例--从W3Cschool爬取C语言教程文本 python环境:: Anaconda3, spyder, windows10 一.基本思想 爬虫就是从网页上抓取你想要的内容,主要分为三个步骤.首先需要仔细分析目标页面内容,知道你想要的内容:文字,图片,视频在HTML中的哪个标签里,然后通过爬虫代码向服务器发起请求,得到HTML页面内容,最后把目标内容解析出来. 分析目标页

VS 2010 C#入门操作小技巧

*推荐C#入门教学视频(http://www.51xue8.com/e/DownSys/play/?classid=27&id=6719&pathid=3&jishu=17) VS 2010 C#入门操作小技巧 1.认识VS2010:阅读技术文档或者教学视频对入门帮助很大! (1)添加类库 点击解决方案名称(如12.demo)右键->添加->类->更改类名 (2)利用控件设计界面 常用控件:button/label/textbox/combobox: 具体控件用途

python实现简单的数学小程序

冒泡法排列list利用打标记来优化 避免重复循环杨辉三角形process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=" alt="python实现简单的数学小程序" />建立二维列表,if判定打印出第一个与最后一个1,其余利用列表索引计算与上图类似将每一行列表尾部补0,利用负索引 直接

[转]用python爬虫抓站的一些技巧总结 zz

来源网站:http://www.pythonclub.org/python-network-application/observer-spider 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本,本来想写google music的抓取脚本的,结果有了强大的gmbox,也就不用写了. 这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,再加上sim

Python爬虫怎么入门-让入门更快速,更专注

经常有同学私信问,Python爬虫该怎么入门,不知道从何学起,网上的文章写了一大堆要掌握的知识,让人更加迷惑. 我也浏览了下网上关于怎么Python爬虫入门的文章,发现有的还在教人用urllib来发送http请求,这真是有点误人子弟了.本文也不提倡刚开始去学习第三方爬虫框架,我想把要学习的知识简化一些,让入门更快速,更专注. Python爬虫入门:技能 真要说Python爬虫需要具备什么知识,那就是你得会Python,哈哈. 其他的知识就是你能熟练运用Python的几个第三方库,当然你具备一点h

有关Python应用的21个小技巧

从我在麦子学院开始学习python的时候,我就尝试着自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!当时我会努力的自己尝试一下这段代码,直到我懂了它的整体思路以后,我就把这段代码加到我的集合里.这篇文章其实就是这个集合整理后一部分的公开亮相.如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发现一些你不知道的新技巧.而如果你之前是一个c,c++,ja

python爬虫从入门到精通-系列教程

开始爬虫之旅 引言 我经常会看到有人在知乎上提问如何入门 Python 爬虫?.Python 爬虫进阶?.利用爬虫技术能做到哪些很酷很有趣很有用的事情?等这一些问题,我写这一系列的文章的目的就是把我的经验告诉大家. 什么是爬虫? 引用自维基百科 网络蜘蛛(Web spider)也叫网络爬虫(Web crawler),蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机