xxwoaini897 发表于 2021-1-13 22:13:45

爬妹子图求解

import requests,json
from lxml import etree


def gethtml(url):
   
    headers={
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
    "Cookie":"",      
    "Referer":"https://www.mzitu.com/217910/40",
    }
    r=requests.get(url,headers=headers)   
    if r.status_code !=200:               
      print("获取url:%s失败!"%(url))
      exit()
    return r                           



def getxpath(r,str):
    html = etree.HTML(r.text)
    reslist = html.xpath(str)
    return reslist



def writetxt(txtpath,data_str):                              
    with open(txtpath, "w") as f:
      f.write(str(data_str))


def writeimg(imgpath,content):      
    with open(imgpath, "wb") as f:
      f.write(content)

def get_mezitu():
    url='https://www.mzitu.com/217910/40'
    r=gethtml(url)
    mezitu_url_list=getxpath(r,'img/html/body/div/div/div/p/a/img/@src')
    mezitu_url=mezitu_url_list
    mezitu_url="https:"+mezitu_url
    r=gethtml(mezitu_url)
    writeimg('./妹子jpg.png',r.content)
    print('恭喜爬到图片')
   
if __name__ == '__main__':

    get_mezitu()
    print('恭喜')下面是报错信息,求大神告诉如何修改。
Traceback (most recent call last):
File "D:/桌面图标文件目录/妹子图.py", line 48, in <module>
    get_mezitu()
File "D:/桌面图标文件目录/妹子图.py", line 40, in get_mezitu
    mezitu_url=mezitu_url_list
IndexError: list index out of range
>>>

小甲鱼的铁粉 发表于 2021-1-13 22:22:40

mezitu_url_list=getxpath(r,'img/html/body/div/div/div/p/a/img/@src')
你的这种爬虫我也看不懂,但是是这里出了问题,导致mezitu_url_list是一个空列表,所以超出限制
你检查一下你的getxpath函数吧

xxwoaini897 发表于 2021-1-13 22:54:56

小甲鱼的铁粉 发表于 2021-1-13 22:22
你的这种爬虫我也看不懂,但是是这里出了问题,导致mezitu_url_list是一个空列表,所以超出限制
你检查 ...

copy xpath 的路径是      /html/body/div/div/div/p/a/img   这里要如何写?

笨鸟学飞 发表于 2021-1-13 22:57:18

别纠结了。你这个很显然是解析网页数据的时候出现了问题,可能是模块问题,也可能是你用法错了
最简单的还是建议换方式吧。现在爬虫用的比较多的是requests,BeautifulSoup模块,和lxml解析器

模块导入:
import requests
from bs4 import BeautifulSoup
# lxml解析器不需要导入
获取网页文本可以这么写:
def getHTMLText(url):
    try:
      res = requests.get(url, timeout=30)
      res.raise_for_status()# 如果状态不是200,即未成功获得数据则抛出异常
      res.encoding = res.apparent_encoding# 用备用编码解码数据
      return res.text
    except:
      return '爬取异常,异常url:' + url
解析可以用:
soup = BeautifulSoup(res.text,'lxml')
temp = soup.select('dd > a') # 函数筛选
# 或者用的比较多的正则
id = re.find_all('"ID":"(.*?)","', res.text)# 正则表达式
soup.find_all(‘div’,class_=’item’)# BeautifulSoup查找
# 或者直接获取属性
soup.a.attrs
这都是当下用的最多最常见的,用的人多了应该就比较稳定了吧,强烈建议试试
你用的这么冷门的,也查不到什么资料,可能很多人也和我一样根本没用过你用的方法
就没法给你解答了。。。

xxwoaini897 发表于 2021-1-13 22:59:58

笨鸟学飞 发表于 2021-1-13 22:57
别纠结了。你这个很显然是解析网页数据的时候出现了问题,可能是模块问题,也可能是你用法错了
最简单的还 ...

感谢。

笨鸟学飞 发表于 2021-1-13 23:21:42

随便写了个代码,凑合看看吧
import requests
from bs4 import BeautifulSoup


def getHTMLtext(url):
    i = 0
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
    }
    try:
      res = requests.get(url, headers=headers)
      res.raise_for_status()
      res.encoding = res.apparent_encoding
      return res.text
    except:
      i += 1
      print('第%d次爬取失败!正在重试···' % i)
      getHTMLtext(url)


def main():
    url = 'https://www.mzitu.com/217910/40'
    html = getHTMLtext(url)
    soup = BeautifulSoup(html,'lxml')
    jpg = soup.find_all('img', class_='blur')
    jpg = jpg.get('src')
    print(jpg)


if __name__ == '__main__':
    main()
页: [1]
查看完整版本: 爬妹子图求解