Python爬虫爬取网站图片

Python爬虫爬取网站图片

初级概述

本周呢,我运用Python的request、pyquery和os库,对于网站上的的图片进行爬取、命名存储。向Python数据分析迈向一步。

代码功能

  • 用户按照需要输入自己想要爬取的网站
    但是光输入网站是不行的,因为不同网站的HTML语言不同,图片存放的具体位置定也不同,对于函数也要更改
  • 用户输入想要存取的文件名
  • 执行即可生成

代码展示

1.导入库,第三方库需要自己install

import requests
from pyquery import PyQuery #数据解析
import os

2.获取请求函数

  #请求网络获取服务器数据
def get_requests(url):
    # 请求头--模拟浏览器--隐藏爬虫身份--设置UA即User-Agent
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
    }
    '''
    headers = {
    #请求头例子
    'Referer': 'https://www.mzitu.com/',
     'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3',
    'Upgrade-Insecure-Requests': '1'
    }
    '''
    html = requests.get(url=url, headers=headers).content.decode('utf-8')
    return html

防止网站认出自己可以随意加UA头

  • 此处我要强调一点:不同网站的验证机制不同,上述网站只要有UA即可,所以很轻松就爬到了,但是有的网站它的反爬做得比较好,他会检测referer、ip等等,所以还要做ip代理(池),写request请求,伪造浏览器cookie等等,大家自行查找,等我学会ip代理再第一时间发到博客上。
    careful
  • (有一个第三方库faker_useragent可以生成header)
  • 我先给一部分UA
UA_list = [\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"\
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",\
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",\
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",\
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",\
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",\
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",\
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
        ]
from fake_useragent import UserAgent

# 得到ua对象
ua = UserAgent()
#ie浏览器的user agent
print(ua.ie)

#opera浏览器
print(ua.opera)

#chrome浏览器
print(ua.chrome)

#firefox浏览器
print(ua.firefox)

#safri浏览器
print(ua.safari)

#最常用的方式
#写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头
print(ua.random)
--------------------- 
#本段代码参考楼下大佬
作者:haeasringnar 
原文:https://blog.csdn.net/haeasringnar/article/details/82490835 

3.解析数据格式,并下载在文件夹中,注意文件夹名称要前后加/
写本函数还要结合网站源代码,来确定数据结构,从而解析出来

#解析数据格式,并下载
def get_content(html):
    #加载数据
    html_py = PyQuery(html)
    #此处是获取图片所在分区为class="span3"
    item=html_py(".span3").items()
    for each in item:
        #获取到保存数据的名称
        name=each.find('img').attr('title')
        #获取路径
        url_img=each.find('img').attr('src')
        print("名称:{} 路径:{}".format(name,url_img))
        #print("名称: %s  路径:%s"%(name,url_img))
        #再一次请求网络
        download_img_url=requests.get(url=url_img).content
        #这样的文件读写更加方便
        with open('./20190317_Cris_photo/'+name+'.jpg','wb') as file:
            file.write(download_img_url)

4.主函数–程序入口

#入口
if __name__ == '__main__':
    #os.getcwd()当前目录绝对路径
    file_path=os.path.join(os.getcwd(),'20190317_Cris_photo')
    if not os.path.exists(file_path):
        os.makedirs(file_path)
    for item in range(1,10):
        #网址,数值强制字符串转换后,获取十页的内容
        url = "https://www.dbmeinv.com/?pager_offset=%s"%str(item)
        #请求网络获取服务器数据
        html=get_requests(url)
        #获取内容并写入文件夹
        get_content(html)

运行结果

文件列表执行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值