搞不定了,谁来帮我下。

2016-05-06 23:53:35 +08:00
 wex
可以采集到首页所有的连接,一共 98 页。
但是内容页采集一直出错,要么是在同一页面一直循环,要么是内容页一直循环,跳不出去。
如果可以的话,最好能写上去重。
https://gist.github.com/wangx2/eac2647c482fc1da86712db8faab6553
万分感谢
3869 次点击
所在节点    Python
17 条回复
wex
2016-05-07 11:06:03 +08:00
有人帮忙呢?
xiahei
2016-05-07 13:45:44 +08:00
楼主图站不错。
wex
2016-05-07 13:51:11 +08:00
@xiahei 代码呢?
wex
2016-05-07 14:10:30 +08:00
在顶一下,我是是在搞不定才来问的。、
xiahei
2016-05-07 14:12:01 +08:00
@wex 没有仔细看你的代码,但是,只需要用 BeautifulSoup 就完全能够把图片地址全给爬下来,然后, urlretrieve 即可。
wex
2016-05-07 14:16:56 +08:00
@xiahei 我爬出来的图片地址只有每个页面的第一个图片,然而进去页面也有很多图片,就不会了,
我想着用循环即可,但是循环控制不好,跳不出去。一直就是要么在一个页面一直抓去,要么在内容页一直抓取(┬_┬)
cphilo
2016-05-07 14:25:06 +08:00
楼主抓这个做什么?
wex
2016-05-07 14:28:15 +08:00
@cphilo 学习。~ ~!
xiahei
2016-05-07 14:31:44 +08:00
http://paste.ubuntu.com/16272437/
诺,这样大概符合你的要求吧。
xiahei
2016-05-07 14:33:10 +08:00
@wex 得到了每个相册地址再去里边把图片抓下来。 Nice!
望楼主注意身体。
wex
2016-05-07 14:41:51 +08:00
@xiahei 我知道得到相册地址,再进去把里面的图片抓下来,但是他运行完,不进行下一次抓取了,反而是循环抓取某一个页面,我如果用 continue 的话,那个进去的图片地址就一直循环,就是说,比如第一个相册有 22 张图,第二个连接相册也只能获取到 22 个,同理第三个一样
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 ),而且发现,所有的相册都是这样的规律,这样一来都不用进每个相册再抓图片地址了。抓到相册地址和图片数直接列表解析就能吧图片地址全抓出来了。
wex
2016-05-07 15:11:37 +08:00
@xiahei 大概明白你意思了!我在研究下
imn1
2016-05-07 16:27:34 +08:00
你的程序挺难读的,一来我不用 bs ,我多用正则;二来这个站三层页面,逐个循环抓,费劲
这个站其实很好抓,参看 12 楼,其实可以放掉第一层页面,直接抓第二层,然后第三层只抓第一页(只需获取最大值:图片张数)就够了,然后按规律生成 url ,而不是抓取 url ,而且文字信息第一页就全了,没必要继续抓后面的 html
由于 url 是生成的,也没有必要去重了

这样的网站,别说瀑布流,连 referer 都没有用,爬虫像挠痒痒太舒服了,至少比抓微博图简单得多,直接用 shell+curl+wget 可能更快
不过作为集图者,对这样的站也没什么兴趣,图片都是低质量压缩,还打上水印,早期练手就会拿来玩
bdbai
2016-05-07 17:22:50 +08:00
@imn1 搭车问一下微博图有哪些坑,最近准备爬。
imn1
2016-05-07 17:42:12 +08:00
@bdbai
好久没爬过了,据闻现在发现会封号……惊!
以前的话就是抓包 XHR 比较麻烦
qqmishi
2016-05-08 00:24:00 +08:00
#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 方便的多,适用范围也广。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX