python爬虫-----网络数据采集

本文介绍了Python爬虫的基础知识,包括图片下载器的实现与问题解决,重点讲解了requests库的使用,如get和post方法、设置headers和使用fake_useragent库。此外,还探讨了代理设置,解决IP被屏蔽问题。文中给出了京东商品爬取和百度/360搜索关键词提交的项目案例,以及爬虫中遇到的常见问题和解决方案。
摘要由CSDN通过智能技术生成

python爬虫-----网络数据采集

一、爬虫基础案例:图片下载器

网络爬虫抓取过程可以理解为模拟浏览器操作的过程,所以深入理解 HTTP 协议更有利于爬虫的学习,并且该部分是面试官非常喜欢问的部分,很重要,详情请见:https://blog.csdn.net/qq_21156327/article/details/105466469


import os
import re

import requests
from colorama import Fore


def download_image(url, keyword):
    """
    下载图片
    :param url: 百度图片的网址
    :return: Bool
    """
    #  1. 向服务器发起HTTP请求
    response = requests.get(url)
    #  2. 获取服务器端的响应信息
    #  响应信息: status_code, text, url
    data = response.text
    #  3. 编写正则表达式,获取图片的网址
    # "ObjURL":"http:\/\/img2.imgtn.bdimg.com\/it\/u=3459137507,1368309920&fm=214&gp=0.jpg"
    # 获取到的: http:\/\/img2.imgtn.bdimg.com\/it\/u=3459137507,1368309920&fm=214&gp=0.jpg
    # 正则的语法: .代表除了\n之外的任意字符, *代表前一个字符出现0次或者无数次. ?非贪婪模式
    pattern = r'"ObjURL":"(.*?)"'
    # 4. 根据正则表达式寻找符合条件的图片网址.
    image_urls = re.findall(pattern, data)
    # 5. 下载猫的图片到本地
    index = 1
    for image_url in image_urls:
        # 转义字符: \n, \t, \ , \\,
        image_url = image_url.replace('\\', '')
        print(image_url)  # 'xxxx.jpg   xxxx.png'
        # response.text返回unicode的文本信息, response.text返回bytes类型的信息
        try:
            response = requests.get(image_url)
        except Exception as e:
            print(Fore.RED + "[-]下载失败: %s" % (image_url))
        else:
            old_image_filename = image_url.split('/')[-1]
            if old_image_filename:
                image_format = old_image_filename.split('.')[-1]
                # jpeg?imageview&thumbnail=550x0
                if '?' in image_format:
                    image_format = image_format.split('?')[0]
            else:
                image_format = 'jpg'

            # 生成图片的存储目录, keyword='cat', 'dog', 'python django'
            keyword = keyword.replace(' ', '_')
            print(keyword)
            if not os.path.exists(keyword):
                os.mkdir(keyword)
            image_filename = os.path.join(keyword, str(index) + '.' + image_format)

            with open(image_filename, 'wb') as f:
                f.write(response.content)
                print(Fore.BLUE + "[+] 保存图片%s.jpg成功" % (index))
                index += 1

if __name__ == '__main__':
    keyword = input("请输入批量下载图片的关键字: ")
    # url地址里面参数信息可以长可以短, 有的参数可以省略的。
    url = 'http://image.baidu.com/search/index?tn=baiduimage&word=' + keyword
    print(Fore.BLUE + '[+] 正在请求网址: %s' % (url))
    download_image(url, keyword)

在这里插入图片描述

遇到的问题:

1.问题:[-]下载失败: http://img1.imgtn.bdimg.com/it/u=2384096151,2805439088&fm=214&gp=0.jpg
原因:反斜杠不识别
解决:遍历image_urls时将这里的反斜杠替换成空即可 image_url = image_url.replace("\\", "")
理解:要把反斜杠替换为

二、网络数据采集

1.网络数据采集之urllib库

2.网络数据采集之requests库(常用)

requests官方网址: https://requests.readthedocs.io/en/master/

requests方法

在这里插入图片描述
我们自己写一个服务器来测试,就不会有反爬

from flask import Flask, request

app = Flask(__name__)


@app.route('/')
def index():
    # 获取用户GET提交的数据信息
    print(request.args)
    return 'index: %s' % (request.args)


@app.route(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值