|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hnysy222 于 2020-3-12 22:01 编辑
小甲鱼xxoo爬虫,,发现煎蛋网web网址和之前不一样了,用老师的代码不可用了,仔细分析后,代码稍作调整,可以实现爬前N页的MM图。
思路:还是先观察,发现第一页网址是“http://jandan.net/ooxx/”,,然后下一页都是以下规律<a title="Older Comments" href="//jandan.net/ooxx/MjAyMDAzMTItMjI4#comments" class="previous-comment-page">下一页</a>
修改的地方:1、用一个字典来存网址,key是页码,value是网址。
2、第一页,查找<span class="current-comment-page">[229]</span> 把229 匹配出来作为key,http://jandan.net/ooxx/是value
判断如果需要爬的页码大于1, 写一个循环,去查找<a title="Older Comments" href="//jandan.net/ooxx/MjAyMDAzMTItMjI4#comments" class="previous-comment-page">下一页</a> 把229-1作为key,匹配//jandan.net/ooxx/MjAyMDAzMTItMjI4#comments作为value, 循环最后把url更新为下一页的网址,再次循环的时候就会去新的网址找下一页。
3、其他代码基本没变。
代码:
import urllib.request
import os
pagedict = { }
def url_open(url):
req = urllib.request.Request(url)
req.add_header('Usr-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36')
response = urllib.request.urlopen(url)
html = response.read()
return html
def get_page(url,pages=1):
html = url_open(url).decode('utf-8')
a = html.find('current-comment-page') + 23 # 加上 23 位偏移就刚到到页码数的第一位数字
b = html.find(']', a) # 找到 a 位置之后的第一个方括号所在位置的索引坐标
num = html[a:b].strip()
num = int(num)
pagedict.update({num:url})
if pages >1:
for i in range (pages-1):
html = url_open(url).decode('utf-8')
a = html.find('Older Comments',0)
b = html.find('" class', a)
# print("c=================== ",c)
page = 'http:' + html[a+22:b]
print('page======= ',page)
pagenum = num -1
# print("pagenum======= ",pagenum)
pagedict.update({pagenum: page})
num -=1
url = page
print(url)
print('1111',pagedict)
def find_imgs(url):
html = url_open(url).decode('utf-8')
img_addrs = []
a = html.find('img src=')
while a!=-1:
b = html.find('.jpg',a,a+255)
if b!=-1:
print(html[a+9:b+4])
img_addrs.append(html[a+9:b+4])
else:
b = a +9
a = html.find('img src=', b) # 在b之后开始,再找img src
for each in img_addrs:
print(each)
return img_addrs
def save_imgs(folder,img_addrs):
for each in img_addrs:
filename = each.split('/')[-1]
print('http:'+ each)
with open(filename,'wb') as f:
img = url_open('http:' +each)
f.write(img)
def download_mm(folder='ooxx',pages=10):
os.mkdir(folder)
os.chdir(folder)
url = 'http://jandan.net/ooxx/'
get_page(url,pages=10)
print(pagedict)
for key in pagedict:
page_url = pagedict[key]
print(page_url)
img_addrs = find_imgs(page_url)
save_imgs(folder,img_addrs)
if __name__ == '__main__':
download_mm()
输出结果:
{233: 'http://jandan.net/ooxx/', 232: 'http://jandan.net/ooxx/MjAyMDAzMTItMjMy#comments', 231: 'http://jandan.net/ooxx/MjAyMDAzMTItMjMx#comments', 230: 'http://jandan.net/ooxx/MjAyMDAzMTItMjMw#comments', 229: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI5#comments', 228: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI4#comments', 227: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI3#comments', 226: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI2#comments', 225: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI1#comments', 224: 'http://jandan.net/ooxx/MjAyMDAzMTItMjI0#comments'}
http://jandan.net/ooxx/
//wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfwt1seoj30tm18gwnu.jpg
//wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfwt1seoj30tm18gwnu.jpg
http://wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfwt1seoj30tm18gwnu.jpg
http://jandan.net/ooxx/MjAyMDAzMTItMjMy#comments
//wx3.sinaimg.cn/mw600/0076BSS5ly1gcrfvuervaj30u018ydu2.jpg
//wx2.sinaimg.cn/mw600/0076BSS5ly1gcrfqwoqodj30u011in2s.jpg
//wx3.sinaimg.cn/mw600/0076BSS5ly1gcrfl2owubj30u00u0gnu.jpg
//wx1.sinaimg.cn/mw600/0076BSS5ly1gcrfkh6s97j30u0103acf.jpg
//wx4.sinaimg.cn/mw600/0076BSS5ly1gcrfgfvug4j30u01al7wh.jpg
//wx2.sinaimg.cn/mw600/0076BSS5ly1gcrfewnds0j30zk0nqtbe.jpg
//wx3.sinaimg.cn/mw600/0076BSS5ly1gcrfaqyaidj30u0190n5q.jpg
//wx2.sinaimg.cn/mw600/0076BSS5ly1gcrf94k6qaj30u0190hdt.jpg
|
|