煎蛋网的图片爬虫

从学习Python的第八天就想要写个简单爬虫,当天就实现了功能,不过遇到了点问题,之后两天也都一一解决了。初学编程语言时写个小作品是令人兴奋的,这对学习过程来说是个很大的激励,所以我向来遵循Learning-by-doing。Learning-by-doing这容易联想到古典经济学的一个名词,被国人简单粗暴的翻译为“干中学”,意为在实践中学习。

这是一个非常简单的爬虫,在此发表一来作为学习记录,二来可以给和我一样的初学者提供一些参考。写爬虫的过程中,遇到的第一个问题就是爬6页就会被403禁止了。当我写好爬虫运行,一张张图片稳妥的下载到了硬盘中,于是准备泡一杯茶优雅的看着爬虫输出一条条胜利的消息,结果回来后看到了爆出的红字错误。

于是就想到了模拟UA,在了解这方面的使用方法时知道了Requests这个模块,于是就好好的了解了一下requests模块,看了官方文档后果然入其所说的那般简单优雅,API的易用性胜于urllib,修改headers只需要一行:

requests.get(url,headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'})

不知道煎蛋网检测机器人是根据什么特征判断的,所以把本机浏览器的headers全部修改成自己浏览器的header,查看本机headers就需要用到chrome的开发者工具(chrome-devtools):F12打开开发者工具并切换到Network标签,访问任意网站,查看任意一个GET请求,就能够知道自己浏览器的headers了。

最后附上源码。(注:需要安装所需模块,否则无法正常运行,模块安装不成功看这里

pip install BeautifulSoup4 requests lxml
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
import requests
import lxml
import re
page_num = int(input("How many pages you want to download?(1~99):"))
headers = {
	'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
	'Accept-Encoding': 'gzip, deflate, sdch',
	'Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4',
	'Connection': 'keep-alive',
	'Referer':'http://jandan.net/ooxx',
	'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
	'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
	}

page = BeautifulSoup(requests.get("http://jiandan.net/ooxx",headers = headers).text,"lxml")
img_num = 0

def get_img():
        global img_num
        for i in page.findAll("a",{"class":"view_img_link"}):
                img_url = ("http:"+i.attrs['href'])
                img_name = re.search(r"\w*.(jpg|gif|png)",img_url).group(0)
                urlretrieve(img_url,img_name)
                img_num += 1
                print("Downloading..."+ img_name)

def new_url():
    new_url = BeautifulSoup(requests.get(page.find("a",{"class":"previous-comment-page"}).attrs['href'],headers = headers).text,"lxml")
    return new_url

for n in range(page_num):
        get_img()
        page = new_url()
print('Thanks you!All done!You have downloaded %d images.' % img_num)

“煎蛋网的图片爬虫”的8个回复

    1. 煎蛋网的图片都是外链的新浪微博,所以实际上这个图片爬虫对网站造成的负载不高。估计也没人用爬虫一直下载上面的图片,这个小爬虫没多少实际用途,只是练手用,煎蛋老大应该不会怪罪我的

    1. 大多数情况下,仅仅是为了保存网页上图片的话,去写爬虫下载是划不来的,因为有很多现成的网页图片的批量下载工具,你可以找找看,只是为了下载图片没那么麻烦。我这里只是为了练手,所以才说这个爬虫实用价值不大。

发表评论

电子邮件地址不会被公开。 必填项已用*标注