吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1898|回复: 11
收起左侧

[已解决] 多进程爬取星巴克

[复制链接]
∫護着妳佉遠方 发表于 2022-1-31 12:47
本帖最后由 ∫護着妳佉遠方 于 2022-1-31 15:40 编辑

使用进程池爬取星巴克的完整代码

[Python] 纯文本查看 复制代码
"""
 * @codding : utf-8
 * @time  : 2022/1/29 13:27:28
 * @name   : 09_多线程爬取.py
 * @system  : Windows 11
 * @Types    : pythonProject
 * @software : PyCharm
 * @author   :  
"""

import re
import time
import urllib.parse
import urllib.request
from multiprocessing import Pool
import requests
from bs4 import BeautifulSoup



def producer():
    url = 'https://www.starbucks.com.cn/menu/'

    head = {
        'Cookie': 'ZHh6ku4z=AMCsJHZ-AQAAOcyxX6Yl2s20HjtkZfHK87MTPofIn6iYXJHzUvqd_HT1ZDMD|1|0'
                  '|36c0e1a8addcb91415dc5a8a4223425eca69e3d4',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                      'like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.76'
    }

    # 请求对象定制
    request = urllib.request.Request(url=url, headers=head)

    #  模拟浏览器向服务器发送请求
    response = urllib.request.urlopen(request)

    content = response.read().decode('utf-8')
    # print(content)
    soup = BeautifulSoup(content, 'lxml')
    # 名称
    # //ul[@class="grid padded-3 product"]//strong/text()
    # 名称列表
    name_list = soup.select('ul[class="grid padded-3 product"] strong')
    # 图片列表.jpg
    # //ul[@class="grid padded-3 product"]//div/@style
    img_lisi = soup.select('ul[class="grid padded-3 product"] div')
    tinydict = {}
    for i in range(len(name_list)):
        name = name_list[i]
        aaa = name.get_text()
        yyy = re.sub('/', ',', aaa)

        img = img_lisi[i]
        bbb = img.attrs.get('style')
        ccc = re.findall(r'url\("(.*)"\)', bbb)[0]
        ddd = 'https://www.starbucks.com.cn' + ccc
        xx = {yyy: ddd}
        tinydict.update(xx)
    # print(list)
    return tinydict



def consumer(tinydict):
    name = tinydict[0]
    img = tinydict[1]
    # print(name, img)
    f = open(name + '.jpg', 'wb')
    d = requests.get(img).content
    f.write(d)
    f.close()
    print('成功下载', name)


if __name__ == '__main__':
    tinydict = producer()
    # print(list)
    pool = Pool(processes=4)
    pool.map(consumer, tinydict.items())




免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
Zeaf + 1 + 1 用心讨论,共获提升!
glz220 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ∫護着妳佉遠方 发表于 2022-1-31 12:48
第74行能正常打印,但是65行打印就有问题,求助解决办法
水墨青云 发表于 2022-1-31 13:33
本帖最后由 水墨青云 于 2022-1-31 13:37 编辑

https://www.runoob.com/python/python-func-map.html
我也初学,别用关键字作为变量名啊
list 是列表,为啥给它字典的格式
[Python] 纯文本查看 复制代码
def producer():
    a = {'1':2,'2':3,'3':4}
    return a

def consumer(a):
    print(a)
 
if __name__ == '__main__':
    a = producer()
    print(a)
    list(map(consumer, a))

[Asm] 纯文本查看 复制代码
输出:
{'1': 2, '2': 3, '3': 4}
1
2
3

 楼主| ∫護着妳佉遠方 发表于 2022-1-31 13:52
水墨青云 发表于 2022-1-31 13:33
https://www.runoob.com/python/python-func-map.html
我也初学,别用关键字作为变量名啊
list 是列表, ...

好吧,我忘记关键词这种事情了,我在试试
 楼主| ∫護着妳佉遠方 发表于 2022-1-31 13:57
水墨青云 发表于 2022-1-31 13:33
https://www.runoob.com/python/python-func-map.html
我也初学,别用关键字作为变量名啊
list 是列表, ...

试了,不是名字的原因,
thepoy 发表于 2022-1-31 15:12
你这个pool是多进程吧?
对多线程和多进程是不是混淆了?
 楼主| ∫護着妳佉遠方 发表于 2022-1-31 15:32
thepoy 发表于 2022-1-31 15:12
你这个pool是多进程吧?
对多线程和多进程是不是混淆了?

是的,确实是进程,不过问题解决了,多谢提醒
小恒 发表于 2022-1-31 18:50
大神666666666
 楼主| ∫護着妳佉遠方 发表于 2022-1-31 20:16

别大神了遇到问题了,太难受了
有兴趣研究一下
https://www.52pojie.cn/thread-1581805-1-1.html
dawangg 发表于 2022-1-31 20:36
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 06:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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