1
wex OP 有人帮忙呢?
|
2
xiahei 2016-05-07 13:45:44 +08:00
楼主图站不错。
|
4
wex OP 在顶一下,我是是在搞不定才来问的。、
|
5
xiahei 2016-05-07 14:12:01 +08:00
@wex 没有仔细看你的代码,但是,只需要用 BeautifulSoup 就完全能够把图片地址全给爬下来,然后, urlretrieve 即可。
|
6
wex OP @xiahei 我爬出来的图片地址只有每个页面的第一个图片,然而进去页面也有很多图片,就不会了,
我想着用循环即可,但是循环控制不好,跳不出去。一直就是要么在一个页面一直抓去,要么在内容页一直抓取(┬_┬) |
7
cphilo 2016-05-07 14:25:06 +08:00
楼主抓这个做什么?
|
9
xiahei 2016-05-07 14:31:44 +08:00
http://paste.ubuntu.com/16272437/
诺,这样大概符合你的要求吧。 |
11
wex OP @xiahei 我知道得到相册地址,再进去把里面的图片抓下来,但是他运行完,不进行下一次抓取了,反而是循环抓取某一个页面,我如果用 continue 的话,那个进去的图片地址就一直循环,就是说,比如第一个相册有 22 张图,第二个连接相册也只能获取到 22 个,同理第三个一样
|
12
xiahei 2016-05-07 14:56:26 +08:00
@wex 你仔细去分析相册 url 和相册里面每张图片 url 的规律,就会发现.对应图片的 url 就是对应相册的图片加上对应 index 。比如某相册的 url 为`http://www.souutu.com/mnmm/xgmm/7980.html`, 显示有 45 张图片,通过源码看见,对应 45 张图片的 url 都为`http://www.souutu.com/mnmm/xgmm/7980_**.html`(**从 1-45 ),而且发现,所有的相册都是这样的规律,这样一来都不用进每个相册再抓图片地址了。抓到相册地址和图片数直接列表解析就能吧图片地址全抓出来了。
|
14
imn1 2016-05-07 16:27:34 +08:00
你的程序挺难读的,一来我不用 bs ,我多用正则;二来这个站三层页面,逐个循环抓,费劲
这个站其实很好抓,参看 12 楼,其实可以放掉第一层页面,直接抓第二层,然后第三层只抓第一页(只需获取最大值:图片张数)就够了,然后按规律生成 url ,而不是抓取 url ,而且文字信息第一页就全了,没必要继续抓后面的 html 由于 url 是生成的,也没有必要去重了 这样的网站,别说瀑布流,连 referer 都没有用,爬虫像挠痒痒太舒服了,至少比抓微博图简单得多,直接用 shell+curl+wget 可能更快 不过作为集图者,对这样的站也没什么兴趣,图片都是低质量压缩,还打上水印,早期练手就会拿来玩 |
17
qqmishi 2016-05-08 00:24:00 +08:00 1
#encoding=utf8
import requests import re def get_page_url(num): if num is 1: url = "http://www.souutu.com/mnmm/index.html" else: url = "http://www.souutu.com/mnmm/index_"+str(num)+".html" r = requests.get(url).content return re.findall("<a href=\"http://www.souutu.com/mnmm/([^\"]+).html\" target=\"_blank\"><img lazy", r) def get_pic_number(page_url): url = "http://www.souutu.com/mnmm/"+page_url+".html" r = requests.get(url).content return int(re.search("共(\d+)张",r).group(1)) def get_pic_url(page_url,number): l=[] for i in range(1,number+1): if i is 1: url = "http://www.souutu.com/mnmm/"+page_url+".html" else: url = "http://www.souutu.com/mnmm/"+page_url+"_"+str(i)+".html" r = requests.get(url).content pic_url = re.search("<img id=\"bigImg\" src=\"([^\"]+)\"",r).group(1) l.append(pic_url) return l for i in range(1,99): page_urls = get_page_url(i) for page_url in page_urls: number = get_pic_number(page_url) pic_urls = get_pic_url(page_url,number) 建议楼主去学习下正则,比 bs4 方便的多,适用范围也广。 |