鱼C论坛

 找回密码
 立即注册
查看: 1187|回复: 3

[已解决]爬虫输出问题

[复制链接]
发表于 2020-3-18 21:25:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from urllib.parse import urlencode
import requests
import os
from multiprocessing import Pool
import time


base_url = 'https://www.toutiao.com/api/search/content/?'
headers = {
    'Referer':'https://www.toutiao.com/search/?keyword=%E5%9B%BE%E7%89%87',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest'
}


def get_page(offset):
    params = {
        'aid': 24,
        'app_name': 'web_search',
        'offset': offset,
        'format': 'json',
        'keyword': '街拍',
        'count': 20,
        'en_qc': 1,
        'cur_tab': 1,
        'from': 'search_tab',
        'pd': 'synthesis',
        'timestamp': '1584520318379'
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.json()
    except requests.ConnectionError as e:
        print('Error', e.args)


def get_images(json):
    if json.get('data'):
        for item in json.get('data'):
            title = item.get('title')
            images = item.get('image_list')
            for image in images:
                yield {
                    'image':image.get('url'),
                    'title':title
                }


def save_image(item):
    if not os.path.exists(item.get('title')):
        os.mkdir(item.get('title'))
    try:
        response = requests.get(item.get('image'))
        if response.status_code == 200:
            file_path = '{0}/{1}.{2}'.format(item.get('title'), time.time(), 'jpg')
            if not os.path.exists(file_path):
                with open(file_path, 'wb', encoding='utf8') as f:
                    f.write(response.content)
            else:
                print('已经存在', file_path)
    except requests.ConnectionError:
        print('下载不成功')


def main(offset):
    json = get_page(offset)
    for item in get_images(json):
        print(item)
        save_image(item)


GROUP_START = 1
GROUP_END = 10


if __name__ == '__main__':
    pool = Pool()
    groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
    pool.map(main, groups)
    pool.close()

麻烦请教大神,我在爬头条图片时,代码成功完成了,但是并没有输出任何东西,值显示    Process finished with exit code 0
网上查了后还是解决不了,是python解释器设置问题么?还是其他
最佳答案
2020-3-18 21:31:38
。。。
二进制写入数据还有encoding???
from urllib.parse import urlencode
import requests
import os
from multiprocessing import Pool
import time


base_url = 'https://www.toutiao.com/api/search/content/?'
headers = {
    'Referer':'https://www.toutiao.com/search/?keyword=%E5%9B%BE%E7%89%87',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest'
}


def get_page(offset):
    params = {
        'aid': 24,
        'app_name': 'web_search',
        'offset': offset,
        'format': 'json',
        'keyword': '街拍',
        'count': 20,
        'en_qc': 1,
        'cur_tab': 1,
        'from': 'search_tab',
        'pd': 'synthesis',
        'timestamp': '1584520318379'
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.json()
    except requests.ConnectionError as e:
        print('Error', e.args)


def get_images(json):
    if json.get('data'):
        for item in json.get('data'):
            title = item.get('title')
            images = item.get('image_list')
            for image in images:
                yield {
                    'image':image.get('url'),
                    'title':title
                }


def save_image(item):
    if not os.path.exists(item.get('title')):
        os.mkdir(item.get('title'))
    try:
        response = requests.get(item.get('image'))
        if response.status_code == 200:
            file_path = '{0}/{1}.{2}'.format(item.get('title'), time.time(), 'jpg')
            if not os.path.exists(file_path):
                with open(file_path, 'wb') as f:
                    f.write(response.content)
            else:
                print('已经存在', file_path)
    except requests.ConnectionError:
        print('下载不成功')


def main(offset):
    json = get_page(offset)
    for item in get_images(json):
        print(item)
        save_image(item)


GROUP_START = 1
GROUP_END = 10


if __name__ == '__main__':
    pool = Pool()
    groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
    pool.map(main, groups)
    pool.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-18 21:31:38 | 显示全部楼层    本楼为最佳答案   
。。。
二进制写入数据还有encoding???
from urllib.parse import urlencode
import requests
import os
from multiprocessing import Pool
import time


base_url = 'https://www.toutiao.com/api/search/content/?'
headers = {
    'Referer':'https://www.toutiao.com/search/?keyword=%E5%9B%BE%E7%89%87',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest'
}


def get_page(offset):
    params = {
        'aid': 24,
        'app_name': 'web_search',
        'offset': offset,
        'format': 'json',
        'keyword': '街拍',
        'count': 20,
        'en_qc': 1,
        'cur_tab': 1,
        'from': 'search_tab',
        'pd': 'synthesis',
        'timestamp': '1584520318379'
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.json()
    except requests.ConnectionError as e:
        print('Error', e.args)


def get_images(json):
    if json.get('data'):
        for item in json.get('data'):
            title = item.get('title')
            images = item.get('image_list')
            for image in images:
                yield {
                    'image':image.get('url'),
                    'title':title
                }


def save_image(item):
    if not os.path.exists(item.get('title')):
        os.mkdir(item.get('title'))
    try:
        response = requests.get(item.get('image'))
        if response.status_code == 200:
            file_path = '{0}/{1}.{2}'.format(item.get('title'), time.time(), 'jpg')
            if not os.path.exists(file_path):
                with open(file_path, 'wb') as f:
                    f.write(response.content)
            else:
                print('已经存在', file_path)
    except requests.ConnectionError:
        print('下载不成功')


def main(offset):
    json = get_page(offset)
    for item in get_images(json):
        print(item)
        save_image(item)


GROUP_START = 1
GROUP_END = 10


if __name__ == '__main__':
    pool = Pool()
    groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
    pool.map(main, groups)
    pool.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 21:33:09 | 显示全部楼层
qiuyouzhi 发表于 2020-3-18 21:31
。。。
二进制写入数据还有encoding???

改了之后还是不行。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 11:10:04 | 显示全部楼层
from urllib.parse import urlencode
import requests
import os
import time
from multiprocessing import Pool
from hashlib import md5



base_url = 'https://www.toutiao.com/api/search/content/?'
headers = {
    'Referer': 'https://www.toutiao.com/search/?keyword=%E5%9B%BE%E7%89%87',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
    'Cookie': 'tt_webid=6804026100667581959; WEATHER_CITY=%E5%8C%97%E4%BA%AC; tt_webid=6804026100667581959; csrftoken=bd43b1b47601e4d2a2e1e143418d047a; ttcid=b334bc3935ae486cacecaeb90c43c7bd27; SLARDAR_WEB_ID=6be7deee-3b7e-4fc3-b933-80b9ef3e934a; s_v_web_id=verify_k7y17xvx_JXDn3y0R_pd7H_47Ow_9dG3_yShA8wX7QWCz; __tasessionId=p53vp50rz1584578659164; tt_scid=ElNCkMU3P.LmI.6-x09lMgCsRockEtxdx5a50beaePY7m3r7ne9z4Rz7.YeDofWY1e89'
}


def get_page(offset):
    timestamp = int(time.time())
    params = {
        'aid': 24,
        'app_name': 'web_search',
        'offset': offset,
        'format': 'json',
        'autoload':'true',
        'keyword': '街拍',
        'count': 20,
        'en_qc': 1,
        'cur_tab': 1,
        'from': 'search_tab',
        'pd': 'synthesis',
        'timestamp': timestamp
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            response.encoding = response.apparent_encoding
            return response.json()
        return None
    except requests.ConnectionError as e:
        print('Error', e.args)
        return None


def get_images(html):
    if html.get('data'):
        html = html.get('data')
        for item in html:
            if item.get('title'):
                title = item.get('title').replace(' |', ' ').replace('\\', ' ')
            if item.get('image_list'):
                for image_urls in item.get('image_list'):
                    image_url = image_urls['url']
                    yield {
                        'title': title,
                        'image': image_url
                    }
    else:
        print('没有获取到数据')


def save_image(item):
    img_path = 'images' + '/' + item.get('title')
    if not os.path.exists(img_path):
        try:
            os.mkdir(img_path)
        except OSError:
            print('文件命名错误')
    try:
        response = requests.get(item.get('image'))
        if response.status_code == 200:
            file_path = '{0}/{1}.{2}'.format(img_path, md5(response.content).hexdigest(), 'jpg')
            if not os.path.exists(file_path):
                with open(file_path, 'wb') as f:
                    f.write(response.content)
            else:
                print('已经存在', file_path)
    except requests.ConnectionError:
        print('下载不成功')
    except OSError:
        print('图片名称格式不对')


def main(offset):
    html = get_page(offset)
    for item in get_images(html):
        print(item)
        save_image(item)


GROUP_START = 0
GROUP_END = 10


if __name__ == '__main__':
    pool = Pool()
    group = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
    pool.map(main, group)
    pool.close()
    pool.join()

已经解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 01:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表