爬虫小试--用python中requests和urllib模块爬取图片

今天突发奇想小试爬虫,获取一下某素材站一些图片

实现步骤如下:

import re
import requests
from urllib import request
import os

# 1.首先要检查数据是否是动态加载出来的
# 2.获取页面源码数据
if not os.path.exists(‘tupian‘):
    os.mkdir(‘tupian‘)
headers = {
   "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
url = "http://sc.chinaz.com/tupian/bingxueshijie.html"
page = requests.get(url=url, headers=headers)
page.encoding=‘utf8‘  # 先解决乱码问题
page_text=page.text  # .text拿到html文本

ex = ‘<div class="box picblock col3".*?src2="(.*?)".*?</p>.*?</div>‘
img_url_list = re.findall(ex, page_text, re.S)  # 正则匹配

for img_url in img_url_list:
    img_path = ‘tupian/‘ + img_url.split("/")[-1]  # 本地存放的文件路径

    request.urlretrieve(url=img_url, filename=img_path)
    print(img_path , "获取成功")

结果:

tupian/bpic9987_s.jpg 获取成功
tupian/bpic9944_s.jpg 获取成功
tupian/zzpic15470_s.jpg 获取成功
tupian/hpic428_s.jpg 获取成功... # 还有一大推就不罗列了

期间遇到一点小坑, 此网站非常的鸡贼, 在网页点检查看到的前端代码并不是真正请求获得的, 而是请求发过去后前端对一些细节做了处理, 所以写正则匹配那一部分的时候不能参照网页检查现实的html

解决办法就是先发请求获得真正请求得到的html文本, 即page_text=page.text   .text拿到html文本, 参照真正请求获得的文本写正则,  如此即可

还有一个小坑就是乱码问题, page.encoding=‘utf8‘ 即可解决

 

原文地址:https://www.cnblogs.com/babyjoy/p/10235912.html

时间: 2024-08-30 07:59:20

爬虫小试--用python中requests和urllib模块爬取图片的相关文章

Python内置的urllib模块不支持https协议的解决办法

Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内置的urllib模块不支持https协议. >>> import urllib>>> urllib.urlopen('http://www.baidu.com')<addinfourl at 269231456 whose fp = <socket._fileo

在python中扩展c语言模块

有一个以前写的c语言代码,我想把它用在python程序中.我先是看了<python基础教程>一书中的方法,书中说可以用swig加python内置distutils模块的方法来实现.我照着书上的步骤试了试,结果在导入模块的时候总是提示"ImportError: dynamic module does not define init function (initprintf)".起初我以为是so文件没有放对位置.但是我试着在目录中建立了一个简单的python模块,然后再导入,发

python中的堆排序peapq模块

heapq模块实现了python中的堆排序,并提供了有关方法.让用Python实现排序算法有了简单快捷的方式. heapq的官方文档和源码:8.4.heapq-Heap queue algorithm 下面通过举例的方式说明heapq的应用方法 实现堆排序 #! /usr/bin/evn python #coding:utf-8 from heapq import * def heapsort(iterable): h = [] for value in iterable: heappush(h

python中根据字符串导入模块module

python中根据字符串导入模块module 需要导入importlib,使用其中的import_module方法 import importlib modname = 'datetime' datetime_module = importlib.import_module(modname) print(datetime_module) # <module 'datetime' from 'C:\\Users\\huchengyue\\AppData\\Local\\Programs\\Pyth

python中time、datetime模块的使用

目录 python中time.datetime模块的使用 1.前言 2.time模块 1.时间格式转换图 2.常用方法 3.datetime模块 python中time.datetime模块的使用 1.前言 如果您从事过python web的开发,那一定有过这样的经历,对于各种复杂繁琐的业务逻辑,掺杂着各种各样的时间约束,让人很容易搞的头晕眼花,比如展示出一天内用户进行过的所有操作记录,再比如进行验证码验证时获取当前时间与验证码生成时间进行比较,检查是否超过10分钟过期时间之类.这些关于时间的业

小贞贞python关于requests和tkinter模块项目实战

requests模块主要是用于网页的请求,获取相应数据 tkinter模块是python基于GUI的一个模块,大致模块如下: 具体可参照:https://www.cnblogs.com/shwee/p/9427975.html 今天给大家介绍,自制翻译小工具的具体项目实战: 整体是实现方式: 步骤一:通过requets模块请求百度翻译 步骤二:通过tkinter模块制作界面,将界面输入的内容传入requests模块,然后点击“翻译”按钮,显示requests模块返回的数据 步骤三:制作成一个ex

python中使用time时间模块

目的:学习python中time模块,可以获取当前时间或时间段 环境:ubuntu 16.04  python3.5.2 time模块,为内置模块,可以用来获取当前时间.日期,还可以设置延迟或倒计时. 使用前需导入模块 import time 常用的方法有:sleep(), strftime(), ctime() sleep(t),设置t的数字,单位为秒,可以有小数点,理解为延迟执行的秒数. time.sleep(5) 等待5秒后继续执行下面的语句. strftime(''),格式输出当前时间,

Python中xlrd和xlwt模块使用方法

本文主要介绍python中如何使用xlrd.xlwt模块操作excel表格,其中xlrd是读excel,xlwt是写excel的库. 安装xlrd和xlwt模块 默认情况下python是没有xlrd和xlwt模块,需要自行安装.模块安装建议使用pip自动安装.安装方法参考<Python自动安装第三方模块> xlrd模块使用 测试使用excel文档名称为Demo.xlsx,内容如下: 代码如下: # -*- coding: utf-8 -*- import xlrd import xlwt fr

Python中的正则表达式-re模块

有时候我们需要模糊查找我们需要的字符串等值,这个时候需要用到正则表达式. 正则表达式的使用,在python中需要引入re包 import re 1.首先了解下正则表达式的常用语法 --单个字符 . 任意的一个字符 a|b 字符a或字符b [afg] a或者f或者g的一个字符 [0-4] 0-4范围内的一个字符 [a-f] a-f范围内的一个字符 [^a] 不是a的一个字符 \s 一个空格 \S 一个非空格 \d [0-9],即0-9的任意字符 \D [^0-9],即非0-9的任意字符 \w [0