python爬虫实践-爬取京东商品图片

这段时间,因为疫情在家无聊,想起了网络爬虫,之前有写过使用requests库,又学了下使用urllib库,在这里记录下学习过程。
首先使用的IDE是pycharm,解释器版本3.
第一步:分析某东的url,发现某东搜索的url构成规律,输入汉服后开始搜索。
在这里插入图片描述
点击下一页后,保存相对应的url
在这里插入图片描述
发现每一页的url不同之处在于其中的&page=数字那里,从第二页开始,page= 后面的数字以2递增,为一个等差数列。改写page=0,在浏览器中打开后发现是第一页,所以所有的url可以构造为一个列表。
在这里插入图片描述
第二部,分析html,查找每一个商品图片对应的url
在这里插入图片描述
检查两三个图片的html元素
发现图片url是这样子的,方便好设计正则表达式,因为html中有很多url不是商品图片链接,所以有必要多看几个,当然,大佬就肯定不必了(我是新手哈哈哈))
在这里插入图片描述
正则表达式:

pat = re.compile(r'//.{5}\.360buyimg.com/n8/.*\.jpg') 

然后就是一次次打开图片url后保存了

附代码:

#-*- coding:utf-8 -*-
"""
@Date: 2020/2/11 20:38
@Author:Shihan Wong
@File: 某东商品图片爬取.py
@Software: PyCharm
"""

import urllib.request
import UA_Pool                              # 自定义的用户代理池
import requests , re
import IP_Pools                             # 自定义的IP池
import os


this_ua = UA_Pool.get_UA()
headers = ("user-agent" , this_ua)

kw = urllib.request.quote('汉服')      # 关键字

page_num = int(input("请输入要爬取的页数:"))           #获取爬取页数

urls = ["https://search.jd.com/Search?keyword=%E6%B1%89%E6%9C%8D&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%B1%89%E6%9C%8D&page= "
       + str(2 * i -1)  + "&s=213&click=0" for i in range(1 , page_num + 1)]          # 构造页面url列表

"""
this_ip = IP_Pools.get_ip()
pro = urllib.request.ProxyHandler({"http":this_ip})
opener = urllib.request.build_opener(pro , urllib.request.HTTPHandler)
opener.addheaders = [headers]
urllib.request.install_opener(opener)
# res = urllib.request.urlopen(url).read().decode("UTF-8" , "ignore")
"""

this_agent = UA_Pool.get_UA()      # 调用get_UA函数获取UA
header = {
    "user-agent":this_agent
          }              # 构造报头


flag = 1       # 页数标识,从第一页开始
for url in urls:          #遍历页面url列表
    path = "E:\\Desktop\\" + str(flag) + "页"
    if os.path.exists(path) == False:
        os.mkdir(path)

    try:
        res = requests.get(url, headers=header)    # requests.get请求
        res.encoding = res.apparent_encoding       # 转换编码
        html = res.text                            # 返回html文件

        pat = re.compile(r'//.{5}\.360buyimg.com/n8/.*\.jpg')       #定义正则表达式
        links = pat.findall(html)                                     # 匹配图片的url链接



        for link in links:                         #遍历字ulr列表
            url_sub = 'http:' + link               # 构造url链接,需要在前面添加http:
            res_sub = requests.get(url_sub)        # 再次请求

            post_name = link.split("/")[-1]       # 以/分割每一个url,用最后一个定义为该url所对应的图片文件名称

            save_path = path + "\\" + post_name      # 再次设计保存路径

            with open(save_path, 'wb') as f:  # 将图片爬取保存,以二进制方式
                f.write(res_sub.content)

        flag += 1       # 保存后页数标识加一

    except Exception as e:
        print(e)                                # 提示错误

代码中flag的作用就是记录一下爬取的页数,然后好方便创建相对应的文件夹
哈哈哈本来是想用urllib的,但莫名其妙出现错误,但requests却可以,显示好像编码啥的有问题。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值