python爬虫入门

最近要用爬虫爬几张图片,花了一天时间从网上找了点代码,了解了一下,以下代码都是从网上下载,侵删。爬虫代码不少,但是涉及到软件版本问题,所以不是都能用,以下代码都是基于py3.6 。

爬虫入门不难,大致都遵循三个步骤:

1.扒下来(用网页下载器将网页源码全部下载下来)如requests

2.存起来(URL管理器将源码存储)可以存内存,也可以整个数据库

3.找出来(网页解析器找到其中感兴趣的内容,要下载图片就将图片链接找到)如正则表达式 、beautiful soup(推荐这个)等

代码中真正关键的只有一行

requests.get(url,params=i)
用参数params向url以GET方式请求数据,返回值就是需要的源码

话不多说,直接撸代码

1.单张图片下载

# -*- coding: utf-8 -*-
import requests

# 这是一个图片的url
url = 'http://yun.itheima.com/Upload/Images/20170614/594106ee6ace5.jpg'
response = requests.get(url)
# 获取的文本实际上是图片的二进制文本
img = response.content
# 将他拷贝到本地文件 w 写  b 二进制  wb代表写入二进制文本
with open( './Sinpic.jpg','wb' ) as f:
    f.write(img)

2.静态网页图片下载

# //引入小需要用到的模块
import requests
import os
from bs4 import BeautifulSoup
def main():
  
    url="http://www.duitang.com/search/?kw=%E6%96%87%E8%B1%AA%E9%87%8E%E7%8A%AC&type=feed"
    req = requests.get(url)
  
  # //将网页内容存储到html_doc变量中
    html_doc = req.text
    soup = BeautifulSoup(html_doc, "lxml")#网页数组化
    
    
    if not os.path.exists('./Stapic/'):  # 新建文件夹
        os.mkdir('./Stapic/')
        
    # 正则匹配的方法,不会用,麻烦,推荐用bs
    # listurl = re.findall(r'src=.+\.jpg',buf)
    
    # bs4
    t = 1  # 记录图片张数
    for myimg in soup.find_all('a', class_='a'):
        # pic_name = str(t) + '.jpg'
        img_src = myimg.find('img').get('src')
        ir = requests.get(img_src)
        open('./Stapic/%d.jpg' % t, 'wb').write(ir.content)
        print("正在下载第%d张图片"%t)
        t += 1

if __name__ == '__main__':
    main()

3.动态网站图片下载

import requests
import os

def getManyPages(keyword,pages):
    params=[]
    for i in range(30,30*pages+30,30):
        params.append({
                      'tn': 'resultjson_com',
                      'ipn': 'rj',
                      'ct': 201326592,
                      'is': '',
                      'fp': 'result',
                      'queryWord': keyword,
                      'cl': 2,
                      'lm': -1,
                      'ie': 'utf-8',
                      'oe': 'utf-8',
                      'adpicid': '',
                      'st': -1,
                      'z': '',
                      'ic': 0,
                      'word': keyword,
                      's': '',
                      'se': '',
                      'tab': '',
                      'width': '',
                      'height': '',
                      'face': 0,
                      'istype': 2,
                      'qc': '',
                      'nc': 1,
                      'fr': '',
                      'pn': i,
                      'rn': 30,
                      'gsm': '1e',
                      '1488942260214': ''
                  })
    url = 'https://image.baidu.com/search/acjson'
    
    # 下面几句是真正访问网站的
    urls = []
    for i in params:
        urls.append(requests.get(url,params=i).json().get('data'))
    #requests.get(url,params=i)用参数i,向url请求数据,;.json()将请求来的数据由<Response [200]>转化为文本,是一个字典;.get('data')将其中的key word为data的数据项其取出来,加入到数组url中
        
        
       
    return urls


def getImg(dataList, localPath):
    
    if not os.path.exists(localPath):  # 新建文件夹
        os.mkdir(localPath)

    x = 0
    for list in dataList:
        for i in list:
            if i.get('thumbURL') != None:
                print('正在下载:%s' % i.get('thumbURL'))
                
                ir = requests.get(i.get('thumbURL'))
                
                open(localPath + '%d.jpg' % x, 'wb').write(ir.content)
                x += 1
            else:
                print('图片链接不存在')

if __name__ == '__main__':
    dataList = getManyPages('宠物猪',1)  # 参数1:关键字,参数2:要下载的页数
    getImg(dataList,'./Dynpic/') # 参数2:指定保存的路径

 

params的参数可能比较懵,那个不需要自己写的,如下图所示,在百度图片搜索一个关键字,然后F12,按照1.2.3的操作(找不到2可以刷新一下网页),可以在Header中看到需要的这些参数,按照4.5的操作就可以找到图片链接
这是基本入门,进阶推荐看一下https://cuiqingcai.com/5052.html讲的很详细。

 

posted on 2018-08-10 10:57  江南烟雨尘  阅读(347)  评论(0编辑  收藏  举报

导航