前言

本文目的:根据本人的习惯与理解,用最简洁的表述,介绍爬虫的定义、组成部分、爬取流程,并讲解示例代码。

基础

爬虫的定义:定向抓取互联网内容(大部分为网页)、并进行自动化数据处理的程序。主要用于对松散的海量信息进行收集和结构化处理,为数据分析和挖掘提供原材料。

今日t条就是一只巨大的“爬虫”。

爬虫由URL库、采集器、解析器组成。

流程

如果待爬取的url库不为空,采集器会自动爬取相关内容,并将结果给到解析器,解析器提取目标内容后进行写入文件或入库等操作。

代码

第一步:写一个采集器

如下是一个比较简单的采集器函数。需要用到requests库。

首先,构造一个http的header,里面有浏览器和操作系统等信息。如果没有这个伪造的header,可能会被目标网站的WAF等防护设备识别为机器代码并干掉。

然后,用requests库的get方法获取url内容。如果http响应代码是200 ok,说明页面访问正常,将该函数返回值设置为文本形式的html代码内容。

如果响应代码不是200 ok,说明页面不能正常访问,将函数返回值设置为特殊字符串或代码。

import requests

def get_page(url):

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}

response = requests.get(url, headers= headers)

if response.status_code == 200:

return response.text

else:

return 'GET HTML ERROR !'

第二步:解析器

解析器的作用是对采集器返回的html代码进行过滤筛选,提取需要的内容。

作为一个14年忠实用户,当然要用豆瓣举个栗子 _

我们计划爬取豆瓣排名TOP250电影的8个参数:排名、电影url链接、电影名称、导演、上映年份、国家、影片类型、评分。整理成字典并写入文本文件。

待爬取的页面如下,每个页面包括25部电影,共计10个页面。

在这里,必须要表扬豆瓣的前端工程师们,html标签排版非常工整具有层次,非常便于信息提取。

下面是“肖申克的救赎”所对应的html代码:(需要提取的8个参数用红线标注)

根据上面的html编写解析器函数,提取8个字段。该函数返回值是一个可迭代的序列。

我个人喜欢用re(正则表达式)提取内容。8个(.*?)分别对应需要提取的字段。

import re

def parse_page(html):

pattern = re.compile('(.*?).*?.*?(.*?).*?

.*?

(.*?)&nbsp.*?
(.*?) / (.*?) / (.*?)

.*?(.*?)' , re.S)

items = re.findall(pattern , html)

for item in items:

yield {

'rank': item[0],

'href': item[1],

'name': item[2],

'director': item[3].strip()[4:],

'year': item[4].strip(),

'country': item[5].strip(),

'style': item[6].strip(),

'score': item[7].strip()

}

提取后的内容如下:

整理成完整的代码:(暂不考虑容错)

import requests

import re

import json

def get_page(url):

#采集器函数

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}

response = requests.get(url, headers= headers)

if response.status_code == 200:

return response.text

else:

return 'GET HTML ERROR ! '

def parse_page(html):

#解析器函数

pattern = re.compile('(.*?).*?

python 爬虫 教程_一个入门级python爬虫教程详解相关推荐

  1. python查天气预报_一个用Python编写抓取天气预报的代码示例

    Python代码抓取获取天气预报信息源码讲解.这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单.这段代码可以获取当地的天气和.任意城市的天气预报,原理是根据ur ...

  2. 怎么创建python django项目_创建Django项目图文实例详解

    本文实例讲述了创建Django项目的方法.分享给大家供大家参考,具体如下: 创建Django项目 创建一个HelloDjango项目 GitHub地址:https://github.com/liang ...

  3. python适配器模式角色_适配器模式(Adapter模式)详解

    在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配.例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访 ...

  4. mysql深入使用教程_深入mysql基础知识的详解

    1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理. 2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程. 3.当发起对MySQL服务器的连接时 ...

  5. 怎么用python爬图片_如何用Python来制作简单的爬虫,爬取到你想要的图片

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  6. python 字符串替换_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  7. python小游戏代码大全-20行python代码的入门级小游戏的详解

    背景: 作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还是非常有趣,就随手添了一点内容,改了一个小例程,当着练练手 ...

  8. PyKivy入门教程:Kivy Python库的介绍、安装及使用方法详解

    PyKivy入门教程:Kivy Python库的介绍.安装及使用方法详解 Kivy是一个跨平台的Python GUI工具包,可以用于开发能够在多种设备和操作系统上运行的应用程序.Kivy支持触摸输入. ...

  9. python telnet线程锁_对python使用telnet实现弱密码登录的方法详解

    系统环境: 64位win7企业版 python2.7.10 2016.08.16修改内容: 1)read_until()函数是可以设置timeout的,之前不能获取到password之后的返回是因为调 ...

最新文章

  1. python 列表算平均分_python平均列表
  2. Science背靠背: NLR受体介导植物抗病反应新机制
  3. 【Python基础】14_Python中的TODO注释
  4. wxWidgets:wxSizerFlags类用法
  5. Linq to Sql 动态条件另类实现方法
  6. yum httpd安装详解
  7. paip.hibernate list 返回位null的解决
  8. MATLAB画qpsk的矢量图,matlab仿真QPSK.doc
  9. 2017云栖大会Tech Insight亮点大剧透
  10. 互联网知识变现,不起眼利润高的冷门行业有哪些?
  11. mysql用户域账户登录_使用本地系统帐户和域用户帐户两者区别(microsoft SQLServer2000...
  12. 影音视频领域开源项目专区
  13. 项目案例:吃货联盟,订餐系统
  14. 图片公式提取至文档word
  15. 搜狗输入法自动打开问题
  16. 小智直播配置安装-配置录播,回放
  17. 【Matlab元胞自动机】元胞自动机大型商场人流疏散【含源码 665期】
  18. 三种洗牌算法shuffle
  19. 如何替换android apk中的so
  20. java中线程控制方法的说法正确的是_在java程序中,下列关于线程的说法错误的时()...

热门文章

  1. RSA连分数攻击实现
  2. IPv6协议原理与实践
  3. 【新技术】不用开发者账号申请ios证书真机调试 1
  4. ios苹果企业签名操作方法及使用流程
  5. 转:美元资产面临再暴跌 中国5000多亿美元外汇储备告急
  6. 采用_beginthread/_beginthreadex函数创建多线程
  7. 利用Arduino uno控制24BYJ48电机正反转停止( 不使用步进库实现方法一)
  8. sun java applet_Java Applet 基础
  9. 简单快速-虚拟机搭建K8S集群
  10. ThreadLocal小试牛刀