BULLSHIT
之前误打误撞写过一篇《自制翻页型爬虫(思路适用很多网站)》,最近遇到瀑布流型的网站,于是继续整理一下有关瀑布流型网站的爬虫思路。
举例网站:http://www.dunkhome.com/products/search
翻页
看一下瀑布流型的网页是如何翻页的:
点击加载更多
页面下方会加载更多的商品(有些网址是往下滚动的时候自动加载,原理一样),但是浏览器地址栏的网址不会改变,那么怎么才能找出类似翻页的规律呢?
鼠标右键点选检查
,出现如下页面,选择Network
一栏,持续点击之前看到的加载更多
进行商品加载,XHR
一栏会依次出现数个元素(这里有3个,即图中被蓝色选中的地方):
依次点击每个元素的Name
列,在Header
列找到Request URL
的值,发现规律:
http://www.dunkhome.com/products/load_more?c_id=&brand_id=&keyword=&sort=&activity_id=&page=2
http://www.dunkhome.com/products/load_more?c_id=&brand_id=&keyword=&sort=&activity_id=&page=3
http://www.dunkhome.com/products/load_more?c_id=&brand_id=&keyword=&sort=&activity_id=&page=4
…
每加载更多
一次,链接变动一次,可以将其看成翻页的页面变化规律。利用这个链接变化规律做循环,就能持续下载需要的图片。 ?
网页源代码
将上面获得的链接打开:
ctrl+u
打开网页源代码:
找图片链接,发现都在src="(.*?).jpg
字段里面,提取出来,进行下载即可 ?
代码示例
#encoding=utf-8
import re
import os
import urllib.request
import urllib
from urllib.request import urlretrieve
import sys
import requests
from bs4 import BeautifulSoup
def read_pageHtml(url):# 获取网页源代码
htmlr=requests.get(url)
bsObjHtml=BeautifulSoup(htmlr.text, features="lxml")
return bsObjHtml
imglist = []
c=1
for a in range(1, 21):# 设置网页循环
url = 'http://www.dunkhome.com/products/load_more?c_id=1&brand_id=&keyword=&sort=&activity_id=&page='+str(a)# 网址规律
data = read_pageHtml(url).__str__()
rule = r'src="(.*?).jpg'# 图片链接的提取规则
imglist = re.findall(rule, data)# 查找所有图片链接
print(imglist, a)
for each in imglist:# 对每个图片链接进行下载
try:
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(each+'.jpg', '/home/dh/dh'+str(c)+'.jpg')
c=c+1
except:
pass
hope it helps ?