本帖最后由 空青 于 2019-8-8 11:30 编辑 
这位童鞋,基础还是需要再打扎实点哈

 我帮你看了下,查出问题所在了,以下是你贴出来的代码
- import requests
 - from lxml import etree
 - import urllib.request
 
- def getpage(pagenumber):
 -         baseurl = 'http://mzitu.92game.net/mm/index_2.html'
 -         selector=etree.HTML(requests.get(baseurl).content)
 -         urls = []
 -         for i in selector.xpath('//div[@class="postlist"]/ul/li/a/@href'):
 -                 urls.append(i)
 -         return urls
 - #print(urls)
 - def geturl(url):
 -         jpglist = []
 -         headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
 -         for each1 in url:
 -                 urlhtml = 'http://mzitu.92game.net'+each1
 -                 sel1 = etree.HTML(requests.get(urlhtml).content)
 -                 jpghtml = sel1.xpath('//div[@class="main-image"]/p/a/img/@src')
 -                 jpglist.append(jpghtml)
 -         return jpglist
 
- def downpic(url1):
 -         for each in url1:
 -                 filename = each.split('/')[-2]
 -                 urllib.request.urlretrieve(each,filename)
 - if __name__=='__main__':
 -         for eachs in getpage(pagenumber):
 -                 print(geturl(eachs))
 
 复制代码 
我说下你代码的问题吧
1、有无效的参数
def getpage(pagenumber),这个pagenumber参数你实际上没有用到,在main函数主函数调用的时候你传入了一个pagenumber,但是这个pagenumber没有赋值。
我的建议:把这个无效的参数去掉,去掉后你的代码大致是以下这样
- def getpage():
 -     baseurl = 'http://mzitu.92game.net/mm/index_2.html'
 -     selector = etree.HTML(requests.get(baseurl).content)
 -     urls = []
 -     for i in selector.xpath('//div[@class="postlist"]/ul/li/a/@href'):
 -         urls.append(i)
 -     return urls
 -   // 中间函数我略掉了
 - if __name__ == '__main__':
 -     for eachs in getpage():
 -         print(geturl(eachs))
 
 复制代码 
2、有未使用的变量
def geturl(url)这个函数里面定义了一个headers头部信息,但是你在函数体里面没有使用,我估计是遗忘了。
我的建议:把这个headers加到requests请求参数里面去,避免被识别为爬虫被封禁。
def geturl(url)函数修改后为:
- def geturl(url):
 -     jpglist = []
 -     headers = {
 -         'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
 -     for each1 in url:
 -         urlhtml = 'http://mzitu.92game.net' + each1
 -         sel1 = etree.HTML(requests.get(urlhtml,headers=headers).content)
 -         jpghtml = sel1.xpath('//div[@class="main-image"]/p/a/img/@src')
 -         jpglist.append(jpghtml)
 -     return jpglist
 
 复制代码 
3、
请求了错误的url,这也是造成你那个错误的原因。
分析如下:
a、主函数入口,getpage()函数返回的实际上是一个详情页面的url相对路径的列表,类似于['/mm/167.html', '/mm/171.html', '/mm/168.html'....]
b、for循环遍历之后实际上已经得到一个url相对路径的字符串了,只需要进行拼接就好。但是你在遍历的时候又调用了geturl(url)函数,这个函数再次遍历了一次,也就是每一个详情页的url字符串进行了遍历,最后得到的结果类似于'/','m','m','/','1','6','7',.....这样拼接后的url自然也是错误的。
我的建议:要么只在主函数中做循环遍历,获取到详情页的url列表后,直接用geturl(url)函数调用。要么只在geturl(url)函数中进行遍历。
4、第四点算是一个建议吧,
变量与函数的命名还可以再规范点。
5、另外,
做网络请求时,最好做一个异常处理。因为你不知道会出什么问题。
最后贴个代码,你参考下。最后你保存图片的那个代码运行肯定也是有问题的,你自己可以再摸索摸索。
 
- import requests
 - from lxml import etree
 - import urllib.request
 
- headers = {
 -     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
 
- def get_detail_url():
 -     '''
 -     用于获取详情页的url列表
 -     :return: 详情页的url列表
 -     '''
 -     base_url = 'http://mzitu.92game.net/mm/index_2.html'
 -     selector = etree.HTML(requests.get(base_url,headers=headers).content)
 -     detail_urls = []
 -     for i in selector.xpath('//div[@class="postlist"]/ul/li/a/@href'):
 -         detail_urls.append(i)
 -     return detail_urls
 
- def get_image_urls(urls):
 -     '''
 -     请求详情页url列表,解析出图片的url地址
 -     :param urls: 详情页url列表
 -     :return: 图片的url列表
 -     '''
 -     image_urls = []
 
-     for detail_url in urls:
 -         tar_url = 'http://mzitu.92game.net' + detail_url
 -         content = etree.HTML(requests.get(tar_url, headers=headers).content)
 -         image_url = content.xpath('//div[@class="main-image"]/p/a/img/@src')
 -         image_urls.append(image_url)
 -     return image_urls
 
- def down_pic(image_urls):
 -     pass
 -     # for image_url in image_urls:
 -     #     filename = image_url[0].split('/')[-2]
 -     #     urllib.request.urlretrieve(image_url, filename)
 
- if __name__ == '__main__':
 -     detail_urls = get_detail_url()
 -     image_urls = get_image_urls(urls=detail_urls)
 -     print(image_urls)
 
 复制代码