찾다
백엔드 개발파이썬 튜토리얼使用Python的urllib和urllib2模块制作爬虫的实例教程

urllib
学习python完基础,有些迷茫.眼睛一闭,一种空白的窒息源源不断而来.还是缺少练习,遂拿爬虫来练练手.学习完斯巴达python爬虫课程后,将心得整理如下,供后续翻看.整篇笔记主要分以下几个部分:

  • 1.做一个简单的爬虫程序
  • 2.小试牛刀--抓取百度贴吧图片
  • 3.总结

1.做一个简单的爬虫程序
首先环境描述

  • Device: Mba 2012 Yosemite 10.10.1
  • Python: python 2.7.9
  • 编辑器: Sublime Text 3

这个没有什么好说的,直接上代码吧!

'''
@ urllib为python自带的一个网络库
@ urlopen为urllib的一个方法,用于打开一个连接并抓取网页,
 然后通过read()方法把值赋给read()
'''
import urllib

url = "http://www.lifevc.com"#多嘴两句,为什么要选lifevc呢,主要是最近它很惹我.
html = urllib.urlopen(url)
content = html.read()
html.close()
#可以通过print打印出网页内容
print content

很简单,基本上没有可说的,这个也就是python的魅力,几行代码就完成.
当然我们仅仅抓取网页,没有实在的价值.接下来我们就开始做一点有意义的事情.

2.小试牛刀
抓取百度贴吧图片
其实也很简单,因为要抓取图片,还需要先分析一下网页源代码
(这里以知道基本html知识,浏览器以chrome为例)
如图,这里简要说下步骤,请参考.

打开网页,右键点击,选择"inspect Element"(最下面这一项)
点击下面弹起来的框框最左边那个问号,问号会变成蓝色
移动鼠标去点击我们想要抓取的图片(一个萌妹子)
如图,我们就可以图片在源码中的位置了

2016120102212622.gif (899×570)

下面将源码相关拷贝出来

<img class="BDE_Image lazy"  src="/static/imghwm/default1.png"  data-src="(.+&#63;\.jpg)"     style="max-width:90%"  style="max-width:90%" style="cursor: url(http://tb2.bdstatic.com/tb/
static-pb/img/cur_zin.cur), pointer;">

经分析和对比(这里略掉),基本上可以看到要抓取的图片几个特征:

  • 在img标签下
  • 在名为BDE_Image的类下面
  • 图片格式为jpg

正则表达式后续我会更新,请关注

依照上述判断,直接上代码

'''
@本程序用来下载百度贴吧图片
@re 为正则说明库
'''
import urllib
import re

# 获取网页html信息
url = "http://tieba.baidu.com/p/2336739808"
html = urllib.urlopen(url)
content = html.read()
html.close()

# 通过正则匹配图片特征,并获取图片链接
img_tag = re.compile(r'')
img_links = re.findall(img_tag, content)

# 下载图片 img_counter为图片计数器(文件名)
img_counter = 0
for img_link in img_links:
  img_name = '%s.jpg' % img_counter
  urllib.urlretrieve(img_link, "//Users//Sean//Downloads//tieba//%s" %img_name)
  img_counter += 1

如图,我们就抓取你懂的图片

2016120102253240.png (908×659)

3.总结
如上两节,我们就很轻松的就可以网页或者图片.
补充一点小技巧,如果遇到不是很明白的库或者方法,可以通过以下方法进行初步了解.

  • dir(urllib)                     #查看当前库有哪些方法
  • help(urllib.urlretrieve)        #查看跟当前方法相关的作用或者参数,官方比较权威

或者https://docs.python.org/2/library/index.html进项相关搜索.

当然百度也可以,但是效率太低.建议使用 http://xie.lu 进行相关搜索(你懂了,绝对满意).
这里我们讲解如何抓取网页和下载图片,在下面我们会讲解如何抓取有限制抓取的网站.

urllib2
上面我们讲解如何抓取网页和下载图片,在下一节里面我们会讲解如何抓取有限制抓取的网站
首先,我们依然用我们上一节课的方法去抓取一个大家都用来举例的网站,本文主要分以下几个部分:

  • 1.抓取受限网页
  • 2.对代码进行一些优化

1.抓取受限网页

首先使用我们上一节学到的知识测试一下:

'''
@本程序用来抓取blog.csdn.net网页
'''
import urllib

url = "http://blog.csdn.net/FansUnion"
html = urllib.urlopen(url)
#getcode()方法为返回Http状态码
print html.getcode()
html.close()
#输出

403

此处我们的输出为403,代表拒绝访问;同理200表示请求成功完成;404表示网址未找到.
可见csdn已做了相关屏蔽,通过第一节的方法是无法获取网页,在这里我们需要启动一个新的库:urllib2
但是我们也看到浏览器可以发那个文,是不是我们模拟浏览器操作,就可以获取网页信息.
老办法,我们先来看看浏览器是如何提交请求给csdn服务器的.首先简述一下方法:

  • 打开网页,右键点击,选择"inspect Element"(最下面这一项)
  • 点击下面弹起来的框框的Network选项卡
  • 刷新网页,就可以看到Network选项卡抓取了很多信息
  • 找到其中一个信息展开,就能看到请求包的Header

2016120102427056.gif (856×706)

以下就是整理后的Header信息

Request Method:GET
Host:blog.csdn.net
Referer:http://blog.csdn.net/&#63;ref=toolbar_logo
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36

然后根据提取的Header信息,利用urllib2的Request方法模拟浏览器向服务器提交请求,代码如下:

# coding=utf-8
'''
@本程序用来抓取受限网页(blog.csdn.net)
@User-Agent:客户端浏览器版本
@Host:服务器地址
@Referer:跳转地址
@GET:请求方法为GET
'''
import urllib2

url = "http://blog.csdn.net/FansUnion"

#定制自定义Header,模拟浏览器向服务器提交请求
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)

#下载网页html并打印
html = urllib2.urlopen(req)
content = html.read()
print content
html.close()

呵呵,你限制我,我就跳过你的限制.据说只要浏览器能够访问的,就能够通过爬虫抓取.

2.对代码进行一些优化
简化提交Header方法
发现每次写那么多req.add_header对自己来说是一种折磨,有没有什么方法可以只要复制过来就使用.答案是肯定的.

#input:
help(urllib2.Request)
#output(因篇幅关系,只取__init__方法)
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
通过观察,我们发现headers={},就是说可以以字典的方式提交header信息.那就动手试试咯!!

#只取自定义Header部分代码
csdn_headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
  "Host": "blog.csdn.net",
  'Referer': 'http://blog.csdn.net',
  "GET": url
  }
req = urllib2.Request(url,headers=csdn_headers)

发现是不是很简单,在这里感谢斯巴达的无私赐教.

提供动态头部信息
如果按照上述方法进行抓取,很多时候会因为提交信息过于单一,被服务器认为是机器爬虫进行拒绝.
那我们是不是有一些更为智能的方法提交一些动态的数据,答案肯定也是肯定的.而且很简单,直接上代码!

'''
@本程序是用来动态提交Header信息
@random 动态库,详情请参考<https://docs.python.org/2/library/random.html>
'''

# coding=utf-8
import urllib2
import random

url = 'http://www.lifevc.com/'

my_headers = [
  'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)',
  'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1',
  'Mozilla/4.0 (compatible; GoogleToolbar 5.0.2124.2070; Windows 6.0; MSIE 8.0.6001.18241)',
  'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
  'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; Sleipnir/2.9.8)',
  #因篇幅关系,此处省略N条
]

random_header = random.choice(headers)
# 可以通过print random_header查看提交的header信息
req = urllib2.Request(url)
req.add_header("User-Agent", random_header)
req.add_header('Host', 'blog.csdn.net')
req.add_header('Referer', 'http://blog.csdn.net')
req.add_header('GET', url)
content = urllib2.urlopen(req).read()
print content

其实很简单,这样我们就完成了对代码的一些优化.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Python vs. C : 응용 및 사용 사례가 비교되었습니다Python vs. C : 응용 및 사용 사례가 비교되었습니다Apr 12, 2025 am 12:01 AM

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Apr 02, 2025 am 07:12 AM

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?Apr 02, 2025 am 07:09 AM

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.