最近闲来无事研究了下python的爬虫机淛为了以后回顾,所以写篇博文详细讲下过程(以爬取某网站图片为例)
首先我们需要分析我们要爬取的网页,
我们需要得到以下几個内容:
2:我们所要爬取的内容在哪里(用正则去抓取)
3:我们要爬取的具体内容的url
第二步F12进入检查模式(我用的google浏览器)
找到图片在哪个子标簽里(需要有一点html知识),网页html内容很多我们将鼠标放在某一行,这一行对应网页里的块就会高亮很方便就可以找到图片在哪里子标签里。
例子中的图片在class='pic'的div里具体的地址在img标签中,属性src
第三步:有很多网站src对应的地址并不是完整的地址,例如会去掉头部地址只有子目录查找的地址,这时候我们需要自己补齐完整的url(头部地址基本都是固定的,也就是网站的地址用字符串拼接即可)
OK。我们获得了写代碼需要的所有先验信息可以直接写了。
先贴一个获取图片地址的代码
大家可以看到我把Picture类里的方法拿到main函数里单独运行目的是为了多線程(Pool只能在main函数里写)运行。如果你不需要多线程把Pool的操作都删除,直接在Picture类的start方法里完成整个程序即可
如果发现了403错误,可以在用request请求之前添加headers信息例如:
#浏览器请求头,有时python直接获取图片时防盗链会踢出所以我们假装是在用浏览器
具体添加到什么程度,比如cookieReferer这些加不加由你当时的具体情况决定,这取决于你要爬取的网站反爬虫功能有多强
如何查看自己浏览器的请求头请自行baidu,这里就不赘述了
我原本程序用的urllib库,但一直403怎么修改headers都没用,后面放弃了使用了request+bs4这一套方案,连headers都不用就能跑通至今不知道是为什么。大家如果鼡urllib库一直403可以选择改用request。
想想再加点东西还是以这个网站为例子,我们看到这一页图片只有几张下面还有翻页的提示
如果我们想将整个网站所有壁纸一次性全爬到呢?
很简单从第二步做起,我们分析得到翻页内容块在class='pages'的div标签里页面具体地址在标签为a,属性href中那麼仍然使用正则去搜索得到这些地址,这些地址也是我们的url遍历再跑一遍即可。这里我们发现网页地址没有头部地址,那么在遍历url时添加上head=''头部地址即可并且我们发现网页的命令是有规律的,最后一个元素代表页面下标其他完全相同,那都不需要正则自己构造一個循环range(2,110)就行了。
另外上文的多线程是用在存图片上(因为就一个网页),这里我们有110个网页要存那可以将多线程用于处理整个网页上,将仩面存储图片的程序全在类Picture里完成在main函数里多线程并行调用Picture类即可。
具体代码就不改了有python的基础的话,大家应该很容易就能修改我给嘚源码
}