目标网址:http://jandan.net/ooxx。
经研究发现,煎蛋网设置了大量的反爬虫机制(果然妹子是第一生产力,网站被爬的痛了),隐藏了图片地址,搞了半天没找出规律。心一横,采取曲线路线,成功爬取大量妹子图~
selenium可以模仿人操作浏览器,从而达到通过与浏览器交互的方式,使服务器上的反爬虫机制失效。但这种方式也有其缺点:1、必须要打开浏览器,程序模拟人对浏览器的操作 2、效率偏低,遇到js脚本多的时候,网站加载时间长(本例的煎蛋网就是,加载网站效率低下,或许这也是反爬虫机制之一?是真的低,一分钟三四十张,要是想全爬下来,这种方式不太合适)3、需要下载对应浏览器的驱动,我用的是谷歌浏览器,对应的是chromedriver.exe,谷歌驱动下载地址http://chromedriver.storage.googleapis.com/index.html,查看notes.txt选择对应的版本,将exe放入python安装目录)
本人采用selenium与requests相结合的方式,selenium获得全部在浏览器加载的元素,用美丽汤解析获得图片地址与下一页网址(此处其实也可以采用selenium自带的click函数访问下一页,selenium的功能很强大,还有很多没有利用),再用requests访问图片获得图片内容并下载图片。
代码如下:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
#输入本页面soup 打开下一页
def nextpage(soup):
text=soup.select('.previous-comment-page')
nextpageurl=text[0]['href']
browser.get(('http:'+nextpageurl))
#解析soup并下载
def downimg(soup,n):
text = soup.select('.view_img_link')
jpglist = []
for i in text:
jpglist.append(i['href'])
for i in jpglist:
temurl='http:'+str(i)
try:
tempres=requests.get(temurl,timeout=5)
except requests.exceptions.ConnectionError:
print('当前图片无法下载')
continue
file_name = "E:\\testimgfile" + '\\' + str(n)+".jpg" # 拼接图片名
fp = open(file_name, 'wb')
fp.write(tempres.content) # 写入图片
n=n+1
return n
url='http://jandan.net/ooxx'
#打开浏览器并登陆目标网址
browser=webdriver.Chrome()
browser.get(url)
#下载50+张图片
n=0
while n<50:
soup = BeautifulSoup(browser.page_source, 'html.parser')
downimg(soup)
n=nextpage(soup,n)
browser.close()
初学python与爬虫,要学习的还很多。煎蛋网以后还会尝试用更高效的方式来爬取测试的~