97766819 发表于 2020-4-22 22:12:34

爬虫大佬可以进来瞧瞧 帮忙小弟 顺便给自己巩固一下

图片url已经被我获得了
使用遍历进行文件保存时候 访问图片url 返回的是404

第一次遇见这样的
我以为代码敲错了

所以我就使用断点测试发现返回404了
如图1所示


目标网站:http://zhainanba.net/category/zhainanfuli/jinrimeizi
下面是代码:
import os,requests
from lxml import etree

count = 1
url = "http://zhainanba.net/category/zhainanfuli/jinrimeizi"
headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
}
response = requests.get(url=url,headers=headers)
response.encoding = "utf-8"
html = response.text


tree = etree.HTML(html)
url = tree.xpath('//article[@class="excerpt excerpt-one"]')


list2 = []
for li in url:
        url_list = li.xpath('./p/a/@href')
        list2.append(url_list)
print("url采集完毕!")

list3 = []
for each in list2:
        response = requests.get(url=each,headers=headers)
        response.encoding = "utf-8"
        html = response.text

        tree = etree.HTML(html)
        imgs = tree.xpath('//article[@class="article-content"]/p/img/@src')
        list3.append(imgs)
        print("正在采集图片中……")
print("采集完毕!")

if not os.path.exists('./test'):
      os.mkdir('./test')

Connection = {
        "Connection": "keep-alive"
}

Server = {
        "Server": "nginx/1.7.7"
}

for src in list3:
        #请求到了图片的二进制数据
        img_data = requests.get(url=src,headers=headers).content
        img_name = str(count) + ".jpg"#
        count = int(count)#
        count += 1#
        imgPath = "./test/" + img_name
        with open(imgPath,"wb") as fp:
          fp.write(img_data)
          print(img_name + '下载成功!')

在网站时候可以正常请求图片 但是你只要刷新一下马上404送给我 = =
大佬们   一共只有7个币 最多给你们6个 还有一个交税了救救me!

Stubborn 发表于 2020-4-22 22:12:35

本帖最后由 Stubborn 于 2020-4-24 00:06 编辑

好可爱的妹子啊{:10_258:} ,测试10张没有问题,速度好慢,不得行,得加代理池用Scrapy取搞


这里额外说一句,
for m in D:
    session.headers["Referer"] = data

关于跟新headers的Referer,还是重新用一个headers用于新的请求,有代测试,这里就爬了一个连接,不测试了




# -*- coding: utf-8 -*-
# !/usr/bin/python3
"""
@ version: ??
@ author: Alex
@ file: test
@datetime: 2020/4/23 - 23:30
@explain:
"""

import requests
import re
import os

session = requests.session()

domain = "http://zhainanba.net"
params = {
    'Accept': 'text/html, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Host': 'zhainanba.net',
    'Pragma': 'no-cache',
    'Referer': 'http://zhainanba.net/category/zhainanfuli/jinrimeizi',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}

data = []
for page in range(1, 5):
    url = f"http://zhainanba.net/category/zhainanfuli/jinrimeizi/page/{page}"
    resp = session.get(url, params=params)
    data += re.findall(r"http://zhainanba\.net/\d+\.html", resp.text)

param = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',

}

# for urls in data:

resp = session.get(data)
D = re.findall("https://ac\.meijiecao\.net/ac/img/znb/meizitu/.*?\.jpg", resp.text)
for m in D:
    session.headers["Referer"] = data
    resp = session.get(m)

    *_, path_, name = m.split("/")
    file_path = os.path.abspath(path_)
    img_path = os.path.join(file_path, name)
    if not os.path.exists(file_path):
      os.mkdir(file_path)

    with open(img_path, "wb") as f:
      f.write(resp.content)

小小小菜菜菜 发表于 2020-4-23 07:34:33

加代理换ip地址,或者每个请求之间加2-3秒的延时,而且你写的headers参数的server和connection也没加入到headers,

会计的会怎么念 发表于 2020-4-23 10:22:52

- 404一般不会是反爬,如果封ip,cookie之类的都是500这一类的
- 我一般从页面节点中解析出来的url都需要与网站域名进行拼接
- 你应该把你在请求图片url之前把你的url打印出来看看,复制到浏览器中看看能不能打开

- 如果上面我说的没有问题,就需要你把最后说的什么一刷新就404的问题描述清楚

97766819 发表于 2020-4-23 12:00:42

小小小菜菜菜 发表于 2020-4-23 07:34
加代理换ip地址,或者每个请求之间加2-3秒的延时,而且你写的headers参数的server和connection也没加入到he ...

这个地方可能是

97766819 发表于 2020-4-23 12:01:15

会计的会怎么念 发表于 2020-4-23 10:22
- 404一般不会是反爬,如果封ip,cookie之类的都是500这一类的
- 我一般从页面节点中解析出来的url都需要 ...

我晚点试试

97766819 发表于 2020-4-23 15:51:47

会计的会怎么念 发表于 2020-4-23 10:22
- 404一般不会是反爬,如果封ip,cookie之类的都是500这一类的
- 我一般从页面节点中解析出来的url都需要 ...

url打印出来看看,复制到浏览器中打不开的 会报404

兔子BUNNY 发表于 2020-4-23 16:13:53

要不试试在headers那里多添加一些东西,有些网站只有useragent是爬不了的,比如cookie什么的还是去踩踩点吧

97766819 发表于 2020-4-23 17:35:27

兔子BUNNY 发表于 2020-4-23 16:13
要不试试在headers那里多添加一些东西,有些网站只有useragent是爬不了的,比如cookie什么的还是去踩踩点吧

网站我发上面了要不你看看

会计的会怎么念 发表于 2020-4-23 18:20:17

97766819 发表于 2020-4-23 15:51
url打印出来看看,复制到浏览器中打不开的 会报404

按照我的经验,404不是他们说的这几个反爬的问题,加不加headers,ip,cookie都不是。
- 你既然打印出来的url就不能用,看看是为什么?
- 你是没有和网站域名拼接?
- 还是和在站点中打开的url有不同?
- 自己观察发现url中的规律是爬虫的基本功

- 如果是反爬,也是url加密或者映射反爬,你现在根本解决不了

会计的会怎么念 发表于 2020-4-23 18:29:12

关于反爬虫的问题,我有几点想说的
1. 我经常回复求助帖,只要是涉及爬虫的,张嘴就是,你加个headers,我从学爬虫到现在,headers里只改user—agent,其他从来没改过
2. 封ip返回的不会是404一般是500这一类的,但是返回的状态码,一定要具体问题具体分析
3. 需要添加cookie的,是需要登陆的网站,因为html无状态,登录信息是需要cookie传递。封cookie换个说法,叫封账号。

- 最后推荐一个视频课程,里面有讲前端基础。
python爬虫_从入门到精通(基础篇)
- 如果想系统学习,崔庆才的书值得买!

97766819 发表于 2020-4-24 18:08:23

Stubborn 发表于 2020-4-22 22:12
好可爱的妹子啊 ,测试10张没有问题,速度好慢,不得行,得加代理池用Scrapy取搞




我晚点试试嘿嘿 老哥6666
页: [1]
查看完整版本: 爬虫大佬可以进来瞧瞧 帮忙小弟 顺便给自己巩固一下