在python3中使用urllib.request编写简单的网络爬虫

Python官方提供了用于编写网络爬虫的包 urllib.request, 我们主要用它进行打开url,读取url里面的内容,下载里面的图片。

分以下几步:

step1:用urllib.request.urlopen打开目标网站

step2:由于urllib.request.urlopen返回的是一个http.client.HTTPResponse object,无法直接读取里面的内容,所以直接调用该对象的方法read(),获取到页面代码,存到html里

step3:构建正则表达式,从页面代码里提取出图片url地址。

step4:根据图片url地址,用urllib.request.retrieve下载到本地

容易出错的地方:

1:python2.x和python3.x中,urlopen具体在哪个包里是不一样的。如果你要在python2.x上实现,要自行百度正确的包。

2:最容易出错的地方是正则表达式,容易出现匹配错误。我程序里写的正则表达式,在目前的网址里是正确的,如果是其他网址可能还会出问题,要具体问题具体分析,去debug。

比如如果img_re=re.compile(r‘(?<=src=)"\w+?jpg"‘)的话,会匹配成""http://tieba..........""或者出现下面的情况

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import urllib.request

import re

def getHtml(url):

    #print("正在打开网页并获取....")

    page=urllib.request.urlopen(url)

    Html=str(page.read())

    print("成功获取....")

    return Html

def getImg(html):

    img_re=re.compile(r‘(?<=src=")\S+?jpg‘)

    #img_re=re.compile(r‘src="(.*?\.jpg)"‘)

    print("the type of html is :",type(html))

    img_list=img_re.findall(html)

    print("len(img_list)=",len(img_list))

    print("img_list[0]=",img_list[0])

    print("正在下载图片......")

    for in range(len(img_list)):

        print("img_list[%d]=%s" % (i,img_list[i]))

        urllib.request.urlretrieve(img_list[i],‘%s.jpg‘ % i)

    print("完成图片下载......")

    print("一共抓到了%d张图片" % len(img_list))

if __name__=="__main__":

    url_baidu="http://tieba.baidu.com/f?kw=%B0%A2%C9%AD%C4%C9"

    html=getHtml(url_baidu)

    getImg(html)

时间: 2024-10-28 18:56:46

在python3中使用urllib.request编写简单的网络爬虫的相关文章

Urllib.request用法简单介绍(Python3.3)

Urllib.request用法简单介绍(Python3.3),有需要的朋友可以参考下. urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块,这里主要介绍urllib.request的一些简单用法. 首先是urlopen函数,用于打开一个URL: # -*- coding:utf-8 -*- #获取并打印google首页的htmlimport urllib.requestre

Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)

Python:requests库.BeautifulSoup4库的基本使用(实现简单的网络爬虫) 一.requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起来比urllib更加简洁方便. requests是第三方库,使用前需要通过pip安装. pip install requests 1.基本用法: import requests #以百度首页为例 response = requests.get('http://www.baidu.com') #res

也写一个简单的网络爬虫

引子 在cnblogs也混了许久,不过碍于平日工作太忙,一篇随笔也没有写过.最近经常感觉到自己曾经积累过的经验逐步的丢失,于是开通了博客,主要是记录一下自己在业余时间里玩的一些东西. 缘起 言归正传.某次在在某高校网站闲逛,看到了一些有趣的东西想要保存起来,但是却分散在各个页面,难以下手.使用baidu,google却有无法避免的搜索到此站点之外的内容.于是就想如果有一个爬虫,可以抓取指定域名的某些感兴趣的内容,不是很好.在网上简单搜索了一下,简单的都不满意,功能强大的又太复杂,就想自己写一个.

用Python写一个最简单的网络爬虫

什么是网络爬虫?这是百度百科的解释: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫. 爬虫可以做什么?爬虫可以帮助我们在茫茫互联网中爬取我们需要的特定数据,这个特定数据可以是任何想获得的数据. 爬虫是一个让人热血的话题,因为当你在写爬虫的时候,你会感觉到自己是在做一件很NB的事,而每当写出一个爬虫,就会在此基础上不断尝试写出更NB的爬虫,有

爬虫其实很简单!——网络爬虫快速实现(一)

今天我来带领大家一起学习编写一个网络爬虫!其实爬虫很简单,没有想象中那么难,也许所有学问都是这样,恐惧源自于无知.废话不多说,现在开始我们的爬虫之旅吧. 爬虫是什么? 我们时常听说编程大牛嘴边一直念叨着"网络爬虫",那网络爬虫究竟是何方神圣呢? 网络爬虫能够模仿用户浏览网页,并将所想要的页面中的信息保存下来.有些同学不禁要问:"我自己浏览网页,可以手动将数据保存下来啊,为何要写个程序去爬取数据呢?"道理其实很简单,程序能够在短时间内访问成千上万的页面,并且在短时间内

爬虫学习之一个简单的网络爬虫

这是一个网络爬虫学习的技术分享,主要通过一些实际的案例对爬虫的原理进行分析,达到对爬虫有个基本的认识,并且能够根据自己的需要爬到想要的数据.有了数据后可以做数据分析或者通过其他方式重新结构化展示. 什么是网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫.via 百度百科网络爬虫 网络蜘蛛(Web spider)也叫网络爬虫(Web c

使用python request编写简单的接口测试

使用requests请求获取返回数据 封装成函数 封装成类 一.使用requests请求post返回的数据 import requests import json # data={ # 'username':'sun', # 'password':'123', # 'data':'test' # } # res=requests.post(url='http://127.0.0.1:8000/login/',data=data) # print(res.text) # print(type(re

用urllib2实现简单的网络爬虫1

玩python的同学都避免不了想写个爬虫玩玩,并且一般都以抓取XX图片为主,当然楼主也不例外~~ 这里先用比较原始的方式:urllib2 + 正则表达式,后面再尝试requests 背景:假设有个网站,是关于一些艺术家及其作品介绍的,登陆进去后,每一页是艺术家的头像和名字列表(由于艺术家很多,所以有很多页):  点击艺术家的头像或名字,就进入该艺术家的主页,主页上有该艺术家的详细介绍和作品列表(由于每个艺术家有很多作品,所有可能会有很多页):   点击其中一部作品,就进入该作品的详细介绍页面,包

简单的网络爬虫程序(Web Crawlers)

程序比较简单,但是能体现基本原理. package com.wxisme.webcrawlers; import java.io.*; import java.net.*; /** * Web Crawlers * @author wxisme * */ public class WebCrawlers { public static void main(String[] args) { URL url = null; try { url = new URL("http://www.baidu.