찾다
웹 프론트엔드HTML 튜토리얼专栏:004:网页下载器的使用_html/css_WEB-ITnose

系列爬虫专栏

崇尚的学习思维是:输入,输出平衡,且平衡点不断攀升。

曾经有大神告诫说:没事别瞎写文章;所以,很认真的写的是能力范围内的,看客要是看不懂,不是你的问题,问题在我,得持续输入,再输出。

差不多正式涉及所谓的网页爬虫

1:框架

序号 内容 说明
01 网络爬虫知识概况 概念是理解和精进的第一步
02 urllib 简单说明使用方法
03 request 强烈建议入手
04 代码示例 使用request爬取博客
05 参考及备注 总结与说明

2:网络爬虫

  • 概念

网络爬虫:网络蜘蛛(Web spider)也叫网络爬虫(Web crawler)[1],蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。

分解复述:爬虫是一段代码,实现的功能是在网页上解析需要的信息。

  • 涉及的名词

URL(Uniform Resource Locator):统一资源定位符,URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等.URL的格式由三部分组成:第一部分是协议(或称为服务方式)。第二部分是存有该资源的主机IP地址(有时也包括端口号)。第三部分是主机资源的具体地址,如目录和文件名等。第一部分和第二部分用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。如:http://www.jianshu.com/collection/dfcf1390085c

网络爬虫就是根据这些URL获取网页信息,再对获取到的网页源代码进行解析出所需要的信息。

3:urllib 库的使用简介

python2 和 python3中使用这个库的方法不一样,具体参考文档说明在python3中,urllib模块被拆分为urllib.request,urllib.parse 和urllib.error

以python3 为例,别问我为什么使用python3, 遇到编码问题你就懂我的好了。

序号 常用方法 解释说明
01 urllib.request.urlopen()
02 urllib.request.Request()
# 代码示例# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport urllib.requesturl = "http://www.geekonomics10000.com/author/admin"html = urllib.request.urlopen(url)response = html.read().decode('utf-8')print(response)

网页在浏览器下的部分显示截图:

1461832263862.png

网页源代码部分截图:chrome浏览器查看

1461832494093.png

代码输出部分截图:可以看到相同的字眼,这意味着,上面代码已经成功的抓取到了网页源代码。

1461832317844.png


4:requests使用介绍

HTTP for humans

常用方法介绍:

序号 方法 解释说明
01 发送请求
02 URL传递参数
03 响应内容 存在不同的响应方式
04 添加HTTP 头部 -
05 响应状态码,响应头部 -

逐个分解使用方法:url = "http://www.geekonomics10000.com/author/admin" 会经常被我用来分析爬虫知识。本人非常喜欢这个博客:学而时嘻之

requests是第三方python库,需要自己安装。安装出问题?生命不息,折腾不止(暴露了是罗粉?)

  • 01:发送请求,继而下载网页源代码
# 实现的和urllib代码相同的功能:# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport requestsurl = "http://www.geekonomics10000.com/author/admin"html = requests.get(url)response = html.textprint(response)

结果部分显示截图:

1461833622056.png

  • 02:URL传递参数

你也许经常想为URL的查询字符串(query string)传递某种数据。如果你是手工构建URL,那么数据会以键/值 对的形式置于URL中,跟在一个问号的后面。例如, httpbin.org/get?key=val

比如:url = "http://yanbao.stock.hexun.com/xgq/gsyj.aspx?1=1&page=1"你想获取不同的网页,你通过翻页发现,只改动page后面的数字就可以了。你有可能为了获取更多的url,会这样:url = "http://yanbao.stock.hexun.com/xgq/gsyj.aspx?1=1&page="+str(i)

那么传递参数是怎么整的?

# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport requestsurl = "http://yanbao.stock.hexun.com/xgq/gsyj.aspx"data = {"1": 1, "page": 4}html = requests.get(url, params=data)print(html.url)# outputhttp://yanbao.stock.hexun.com/xgq/gsyj.aspx?page=4&1=1别问我为什么后面的位置反了,又没影响正常访问。好吧。因为字典是无序的。
  • 03:响应内容读取服务器响应的内容:
# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport requestsurl = "http://www.geekonomics10000.com/author/admin"html = requests.get(url)response_1 = html.text      # response_2 = html.content   # 以字节的方式访问请求响应体,对于非文本请求response_3 = html.raw       # 原始响应print(type(response_1))print(type(response_2))print(type(response_3))# output<class 'str'><class 'bytes'><class 'requests.packages.urllib3.response.HTTPResponse'># 一般选择第一种text响应...
  • 04:响应头部

防盗链和伪装成浏览器访问:防盗链就是需要在请求的头部加入Referer字段, Referer 指的是HTTP头部的一个字段, 用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。某些网站做了限制,进制爬虫的访问,此时我们可以更改HTTP的header

HTTP状态码HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。比较常见的是200响应成功。403禁止访问。2xx成功3xx重定向4xx客户端错误5xx服务器错误

# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport requestsurl = "http://blog.csdn.net/pongba"   # 刘未鹏的CSDN博客地址html = requests.get(url)print(html.status_code)# output:403---# 添加头部信息:# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport requestsurl = "http://blog.csdn.net/pongba"headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36',           "Referer": 'http://blog.csdn.net/pongba/article/details/7911997'}html = requests.get(url, headers=headers)print(html.status_code)# output200

如何获取头部信息:截图演示:chrome 浏览器,右键,检查。

1461836313681.png

5:实战抓取博文

获取 刘未鹏 博客:[BetterExplained]如何有效地记忆与学习 的全部博文文章地址

# -*- coding:utf-8 -*-# To: learn module# Date:2016.04.28# Author: wuxiaoshenimport requestsimport reimport codecsclass LiuweipengBlog(object):    def __init__(self):        self.url = "http://blog.csdn.net/pongba/article/details/4033477"        self.header = {"User-Agent": 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36',           "Referer": 'http://blog.csdn.net/pongba/article/details/7911997'}        self.pattern_content = r'<div id="article_content" class="article_content">(.*?)</div>'        self.pattern_word = r'<strong>(.*?)</strong>'        pass    def download(self):        html = requests.get(self.url, headers=self.header)        try:            if html.status_code == 200:                return html.text        except:            print("Something with it.")        pass    def parse_content(self, content):        passage = re.findall(self.pattern_content, content, re.S)        words = re.findall(self.pattern_word, str(passage), re.S)        print(words)        return words        pass    def save_content(self, passage):        filename = "blog.txt"        with codecs.open(filename, 'w',encoding='utf8') as f:            f.write(str(passage))        passif __name__ == "__main__":    Blog_passage = LiuweipengBlog()    content = Blog_passage.download()    passage = Blog_passage.parse_content(content)    Blog_passage.save_content(passage)

分析过程显示:正则为什么那样写:网页源代码唯一标示啊,然后再在这里面分析,大部分文字在(.*?)注意到写的正则没有使用很复杂的表达式,就使用了(.*?)就完成了大部分任务。

1461837985361.png

效果显示:网页的文章开头:

1461837713238.png

抓取的开头:

1461837743668.png

网页的结尾:

1461837763015.png

抓取的结尾:

1461837795287.png

代码还存在好些值得优化的地方(不写注释的程序员,不是个好吃货)。你懂的。因为...我还有事。。可以先直观的看看实现过程。

6:参考及说明

参考资料1:requests文档urllib文档

正则表达式参考教程:爬虫系列教程

关于本人:国内小硕,跌跌撞撞的IT学习者。兴趣领域:爬虫及数据科学

本人正在构建一个爬虫学习付费(30)社群。付费是为了降低信噪比。社群的理念是:思维,不断的精进。有兴趣的可以私信,限制30名。群内鼓励原创教程,不断交流精进,目前已经有小伙伴参加。

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

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 역할 : 웹 컨텐츠 구조HTML의 역할 : 웹 컨텐츠 구조Apr 11, 2025 am 12:12 AM

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

HTML 및 코드 : 용어를 자세히 살펴 봅니다HTML 및 코드 : 용어를 자세히 살펴 봅니다Apr 10, 2025 am 09:28 AM

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구Apr 09, 2025 am 12:12 AM

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

HTML, CSS 및 JavaScript의 역할 : 핵심 책임HTML, CSS 및 JavaScript의 역할 : 핵심 책임Apr 08, 2025 pm 07:05 PM

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

HTML은 초보자를 위해 쉽게 배우나요?HTML은 초보자를 위해 쉽게 배우나요?Apr 07, 2025 am 12:11 AM

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

HTML의 시작 태그의 예는 무엇입니까?HTML의 시작 태그의 예는 무엇입니까?Apr 06, 2025 am 12:04 AM

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

메뉴에서 점선 분할 효과의 중심 정렬을 달성하기 위해 CSS의 Flexbox 레이아웃을 사용하는 방법은 무엇입니까?메뉴에서 점선 분할 효과의 중심 정렬을 달성하기 위해 CSS의 Flexbox 레이아웃을 사용하는 방법은 무엇입니까?Apr 05, 2025 pm 01:24 PM

메뉴에서 점선 분할 효과를 설계하는 방법은 무엇입니까? 메뉴를 설계 할 때는 일반적으로 접시 이름과 가격 사이에 왼쪽과 오른쪽을 정렬하는 것이 어렵지 않지만 점선 또는 중간의 점은 어떻습니까?

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에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

맨티스BT

맨티스BT

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

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기