零基础注意了啊,教你们如何入门python爬虫,不要胡乱踹门

Python Web安全入门:从爬虫到渗透测试的自动化实战 Web安全是网络安全的核心领域,其本质在于理解HTTP/HTTPS协议交互中的潜在风险。通过分析请求与响应,可以识别SQL注入、跨站脚本等常见漏洞的成因。掌握自动化技术能极大提升安全测试效率,将重复性任务转化为脚本执行。在工程实践中,Python凭借其丰富的库生态成为实现自动化安全工具的首选语言。结合爬虫技术进行信息收集,并运用安全知识进行漏洞检测,可以构建从侦察到验证的完整工作流。本文以**渗透测试**和**虚拟环境**为核心,通过搭建隔离开发环境、使用Requests与BeautifulSoup库,演示 阅读详情

古人云:失败乃成功之母!

这句说的是有道理的~

成功!无非就是两步路

开始和坚持

然后倒在这俩步路上的人实在是太多太多了~

好了,不说闲话了,回归正题吧!

入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。

另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你需要学习的是怎么样做一个比较大的东西,在这个过程中,你会很快地学会需要学会的东西的。当然,你可以争论说需要先懂python,不然怎么学会python做爬虫呢?但是事实上,你完全可以在做这个爬虫的过程中学习python 😄

先长话短说summarize一下:

你需要学习

  • 基本的爬虫工作原理
  • 基本的http抓取工具,scrapy
  • Bloom Filter: Bloom Filters by Example
  • 如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq:
    https://github.com/nvie/rq
  • rq和Scrapy的结合:darkrho/scrapy-redis · GitHub
  • 后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)

以下是短话长说:

说说我最开始写的一个集群爬下整个豆瓣的经验吧。

1)首先你要明白爬虫怎样工作。

想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。

在人民日报的首页,你看到那个页面引向的各种链接。于是你很开心地从爬到了“国内新闻”那个页面。太好了,这样你就已经爬完了俩页面(首页和国内新闻)!暂且不用管爬下来的页面怎么处理的,你就想象你把这个页面完完整整抄成了个html放到了你身上。

突然你发现, 在国内新闻这个页面上,有一个链接链回“首页”。作为一只聪明的蜘蛛,你肯定知道你不用爬回去的吧,因为你已经看过了啊。所以,你需要用你的脑子,存下你已经看过的页面地址。这样,每次看到一个可能需要爬的新链接,你就先查查你脑子里是不是已经去过这个页面地址。如果去过,那就别去了。

好的,理论上如果所有的页面可以从initial page达到的话,那么可以证明你一定可以爬完所有的网页。

那么在python里怎么实现呢?

很简单

import Queue
initial_page = "http://www.renminribao.com"
url_queue = Queue.Queue()
seen = set()
seen.insert(initial_page)
url_queue.put(initial_page)
while(True): #一直进行直到海枯石烂
 if url_queue.size()>0:
 current_url = url_queue.get() #拿出队例中第一个的url
 store(current_url) #把这个url代表的网页存储好
 for next_url in extract_urls(current_url): #提取把这个url里链向的url
 if next_url not in seen: 
 seen.put(next_url)
 url_queue.put(next_url)
 else:
 break

写得已经很伪代码了。

所有的爬虫的backbone都在这里,下面分析一下为什么爬虫事实上是个非常复杂的东西——搜索引擎公司通常有一整个团队来维护和开发。

2)效率

如果你直接加工一下上面的代码直接运行的话,你需要一整年才能爬下整个豆瓣的内容。更别说Google这样的搜索引擎需要爬下全网的内容了。

问题出在哪呢?需要爬的网页实在太多太多了,而上面的代码太慢太慢了。设想全网有N个网站,那么分析一下判重的复杂度就是N*log(N),因为所有网页要遍历一次,而每次判重用set的话需要log(N)的复杂度。OK,OK,我知道python的set实现是hash——不过这样还是太慢了,至少内存使用效率不高。

通常的判重做法是怎样呢?Bloom Filter. 简单讲它仍然是一种hash的方法,但是它的特点是,它可以使用固定的内存(不随url的数量而增长)以O(1)的效率判定url是否已经在set中。可惜天下没有白吃的午餐,它的唯一问题在于,如果这个url不在set中,BF可以100%确定这个url没有看过。但是如果这个url在set中,它会告诉你:这个url应该已经出现过,不过我有2%的不确定性。注意这里的不确定性在你分配的内存足够大的时候,可以变得很小很少。一个简单的教程:Bloom Filters by Example

注意到这个特点,url如果被看过,那么可能以小概率重复看一看(没关系,多看看不会累死)。但是如果没被看过,一定会被看一下(这个很重要,不然我们就要漏掉一些网页了!)。 [IMPORTANT: 此段有问题,请暂时略过]

好,现在已经接近处理判重最快的方法了。另外一个瓶颈——你只有一台机器。不管你的带宽有多大,只要你的机器下载网页的速度是瓶颈的话,那么你只有加快这个速度。用一台机子不够的话——用很多台吧!当然,我们假设每台机子都已经进了最大的效率——使用多线程(python的话,多进程吧)。

文末有福利哦

3)集群化抓取

爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了…

那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?

我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的url_queue,如果我们能把这个queue放到这台master机器上,所有的slave都可以通过网络跟master联通,每当一个slave完成下载一个网页,就向master请求一个新的网页来抓取。而每次slave新抓到一个网页,就把这个网页上所有的链接送到master的queue里去。同样,bloom filter也放到master上,但是现在master只发送确定没有被访问过的url给slave。Bloom Filter放到master的内存里,而被访问过的url放到运行在master上的Redis里,这样保证所有操作都是O(1)。(至少平摊是O(1),Redis的访问效率见:LINSERT – Redis)

考虑如何用python实现:

在各台slave上装好scrapy,那么各台机子就变成了一台有抓取能力的slave,在master上装好Redis和rq用作分布式队列。

代码于是写成

#slave.py
current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
 to_send.append(next_url)
store(current_url);
send_to_master(to_send)
#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()
initial_pages = "www.renmingribao.com"
while(True):
 if request == 'GET':
 if distributed_queue.size()>0:
 send(distributed_queue.get())
 else:
 break
 elif request == 'POST':
 bf.put(request.url)

4)展望及后处理

虽然上面用很多“简单”,但是真正要实现一个商业规模可用的爬虫并不是一件容易的事。上面的代码用来爬一个整体的网站几乎没有太大的问题。

但是如果附加上你需要这些后续处理,比如

有效地存储(数据库应该怎样安排)

有效地判重(这里指网页判重,咱可不想把人民日报和抄袭它的大民日报都爬一遍)

有效地信息抽取(比如怎么样抽取出网页上所有的地址抽取出来,“朝阳区奋进路中华道”),搜索引擎通常不需要存储所有的信息,比如图片我存来干嘛…

及时更新(预测这个网页多久会更新一次)

如你所想,这里每一个点都可以供很多研究者十数年的研究。虽然如此,

“路漫漫其修远兮,吾将上下而求索”。

所以,不要问怎么入门,直接上路就好了:)

如果学会了python的基本语法,我认为入门爬虫是很容易的。

我写的第一个爬虫大概只需要10分钟,自学的 scrapyd , 看官方文档花了20分钟,

因为我英文不是很好,很多单词需要搜索一下。

(scrapy 并不是入门必须的,所以你可以看完我的答案再酌情考虑 scrapy )

再接触到了 requests , lxml ,配合基本库 urllib, urllib2 就几乎无所不能了。

后来有人推荐我用 BeatufulSoup 之类的库,但其实原理都差不多。

一、入门爬虫的干货

  • 爬虫的基本思路
  • a. 通过URL或者文件获取网页,
  • b. 分析要爬取的目标内容所在的位置
  • c. 用元素选择器快速提取(Raw) 目标内容
  • d. 处理提取出来的目标内容 ( 通常整理合成一个 Json)
  • e. 存储处理好的目标内容 (比如放到 MongoDB 之类的数据库,或者写进文件里。)

为什么我入门爬虫那么快,我是不是在装逼?

答:我自己总结了一下,在接触爬虫之前:

  • a. 我挺了解HTTP 协议(看了《HTTP权威指南》),
  • b. 我写过基于Flask框架的后端(大概三年前@萧井陌 在知乎上推荐Flask框架,然后我就自学了,用的是《Flask Web开发:基于Python的Web应用开发实战 》)
  • c. 我写过前端(HTML+CSS+JS),了解什么是DOM ,会一点jquery。
  • d. 正则也是勉强够用的。
  • e. 本人大学也是计算机专业,学习挺认真的。
  • f. 所以算是厚积薄发。

那么毫无专业基础,也没有前后端基础的人应该怎么办?

答:那当然要超过半小时啦。先花点时间去大概了解以下内容:

  • a. HTTP协议的请求方法,请求头部,请求数据
  • b. 大概了解一下什么是 cookie
  • c. 学一点HTML和元素选择器
  • d. 学会使用Chrome 的 开发者工具

磨刀不误砍柴工,当然如果有人带着,这些大概1-2小时就能过到能凑合用的程度了。如果没人带,就上网搜索学习一下,也很快的,估摸最多十小时。

3. 放一个新鲜出炉的代码,看懂就能入门了:

4. Python 爬虫常用的库是哪些?入门应该掌握哪些库?

答:网上有很多相关的资料,但是我个人觉得新入门的人,不需要也不应该一下子接触所有的库。正如幼儿刚开始学说话的时候,不应该同时教普通话粤语闽南语英语。

我个人认为,学会 requests 和 lxml ,就可以入门爬虫了。

其他的常用库,自己搜,但注意贪多嚼不烂。 (我整理出来的被小马甲人喷了,我很不开心,所以我自己存好删了)

二、一点点涉及爬虫进阶的分界线

  • 知乎上很多爬虫代码,一个函数几十行,是很不好的。应该尽量减少重复代码。
  • 重要的事情说三次,

函数不是越长越好, 好代码应该简单易懂好维护!
函数不是越长越好, 好代码应该简单易懂好维护!
函数不是越长越好, 好代码应该简单易懂好维护!

(放在进阶是因为能做到这一点的爬虫代码不多,很多都一团乱麻,坑死接盘侠)

Scrapy + MongoDB + Redis 分布式爬虫系统其实不复杂。

  • a). Redis 用来存储要爬取的网页队列,也就是任务队列
  • b). MongoDB 用来存储爬取的内容结果。
  • c) . Scrapy 里放爬虫crawler , 分别爬取不同的网页内容,

ps:分布式这个东西,听起来很恐怖,但是拆开了也就这样。所以不用害怕。

曾经在某创业公司被赶鸭子上架(我最初是一个后端程序员,现在成分有点复杂,一言难尽),要在一星期内跟一个分布式爬取各大网商(包括淘宝天猫京东等十几家网商,Scrapy + MongoDB + Redis)的数据。

当时差点吓坏我了,因为没写过爬虫。

然后leader 给我的线索只有 基本框架是 Scrapy。

也许是无知者无畏, 也没想到去问谁,就自己看了 Scrapy 的文档,半小时就写出来了。

后来就很顺利把分布式爬虫系统搭起来了。

还爬了谷歌、百度、Bing、 Pinterest 、Instagram 等大量和当时公司业务相关的数据。

就这样,我做到了。

当然,加了不少班。

ps: 用很多的机器,代表需要爬取的爬取的数据量很多,但是和项目的复杂程度不一定相关。所以不要害怕。害怕也没用,需求来了,一边颤抖一边加班也要写完代码的。

pps: 你们要复制粘贴就能跑的代码

# -*- coding: utf-8 -*-
import os
import requests
from lxml import html
headers = {
 'Host': 'www.zhihu.com',
 'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6',
 # 2017.12 经网友提醒,知乎更新后启用了网页压缩,所以不能再采用该压缩头部
 # !!!注意, 请求头部里使用gzip, 响应的网页内容不一定被压缩,这得看目标网站是否压缩网页
 # 'Accept-Encoding': 'gzip, deflate, sdch, br',
 'Connection': 'keep-alive',
 'Pragma': 'no-cache',
 'Cache-Control': 'no-cache',
 'Upgrade-Insecure-Requests': '1',
 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) '
 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
}
def save(text, filename='temp', path='download'):
 fpath = os.path.join(path, filename)
 with open(fpath, 'w') as f:
 print('output:', fpath)
 f.write(text)
def save_image(image_url):
 resp = requests.get(image_url)
 page = resp.content
 filename = image_url.split('zhimg.com/')[-1]
 save(page, filename)
def crawl(url):
 resp = requests.get(url, headers=headers)
 page = resp.content
 root = html.fromstring(page)
 image_urls = root.xpath('//img[@data-original]/@data-original')
 for image_url in image_urls:
 save_image(image_url)
if __name__ == '__main__':
 # 注意在运行之前,先确保该文件的同路径下存在一个download的文件夹, 用于存放爬虫下载的图片
 url = 'https://www.zhihu.com/question/27364360' # 有一双美腿是一种怎样的体验?
 crawl(url)

如果你觉得还是不知道从何入手,这里整理了一些Python的学习资料,希望能帮到你!

关于Python的技术储备

如果你是准备学习Python或者正在学习,下面这些你应该能用得上:

① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习
⑤历年互联网企业Python面试真题,复习时非常方便

文末有领取方式哦

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python课程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

在这里插入图片描述

三、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

四、Python漫画教程

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。
在这里插入图片描述

在这里插入图片描述

五、互联网企业面试真题

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要也可以扫描下方csdn官方二维码,【保证100%免费】
在这里插入图片描述

百度贴吧通用爬虫 号外!号外!号外! 喜欢逛贴吧的朋友们,你们的福利来啦!经过本人的一顿操作,我写出了百度贴吧的通用爬虫,只需要输入你想爬取的贴吧名字就可以进行内容的爬取。 喜欢校花吗?来咱们一起看一看校花吧的首页吧 看看这忧郁的眼神,瞬间征服了多少宅男的心(手动滑稽) 百度贴吧的请求地址如下: http://tieba.baidu.com/f?ie=utf-8&kw=校花&fr=search... 阅读详情

相关推荐

Python爬虫新手必看:如何绕过百度安全验证(附完整UA代理池代码)

本文为Python爬虫新手提供了绕过百度安全验证的完整策略与实战代码。文章深入剖析了反爬机制,并系统讲解了如何通过构建专业的UA代理池、管理IP资源、模拟人类访问节奏以及处理动态内容等综合手段,实现稳健的数据采集。

weixin_29061997的博客 2406

手机APP爬虫配置指南(以Windows系统为例)

打开Fiddler →。重启模拟器使证书生效。

shuaige_shiwoa的博客 1440

python爬虫-国家企业_自动查企业工商登记信息(企业信用信息公示系统、极验Geetest与Python爬虫)...

一、引言:信贷作业的过程就是信息搜集和验证的过程。对于企业客户,最权威的信息渠道莫过于工商登记信息,各种第三方查询工具(天眼查、启信宝、各种各样的API等等)也来源于此。常见的问题在于,我们不仅要查借款人,还要查其法人股东(不断追溯),下属企业,以及担保企业、上下游主要交易对手等等。这样,调查一个客户往往要查询七八户企业。如何高效、自动完成查询?如何在查询的同时规范化存储、整理各种信息(而不是胡乱...

weixin_39628405的博客 2906

入门python爬虫

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 “入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你...

dxdfe的博客 334

爬虫实战入门学(数据爬取->数据分析->数据存储)

爬虫实战入门学(数据爬取->数据分析->数据存储),使适用于不懂爬虫的新用户快速上手

qq_40898461的博客 4509

Crawler爬取旅行轨迹数据 - 以两步官网为例

在这个示例中,我们将演示如何爬取湖北武汉东湖的旅行轨迹数据。请注意,这只是一个示例,您可以根据自己的需求来修改爬虫设置。

ThsPool的博客 6192

Python 爬取经纬度

爬取百度地图拾取坐标系统 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditi...

ArYe 7463

关于Python接单的一些问题

引言 我虽然只是接过几单,但是从接单过程来看,我还是总结出来了一些值得推而广之的经验啦,在这里与大家分享一下。 这里我所说的可能更适合接待单的新手,接单大佬可以忽略。 关于Python接单的一些问题 文章目录引言关于Python接单的一些问题一、在哪里接单二、接怎样的单三、不接什么单四、写程序时应该注意的事项五、其他注意事项 一、在哪里接单 首先,我们知道当今是一个网络十分发达的社会,因此其实大量的单是在互联网这个平台上实现发布以及接收的,因此,Python的很多单子其实也都是在网络上面的啦,这里介绍几个接

江月的博客 1万+

Python爬虫与数据分析实战:零基础高效学习径与核心项目

在数据驱动的时代,掌握数据处理与分析能力已成为一项核心技能。其原理在于通过编程手段自动采集、清洗、转换和分析数据,从而提取有价值的信息。这项技术的核心价值在于将海量、非结构化的信息转化为可量化、可洞察的决策依据,广泛应用于市场研究、舆情监控、商业智能等场景。Python因其简洁的语法和强大的生态库,如requests、BeautifulSoup和pandas,成为实现数据采集(爬虫)与分析的理想工具。本文聚焦于这两个实用方向,通过热的豆瓣电影和GitHub Trending等实战案例,系统讲解从环境搭建、

virusswb的专栏 376

零基础玩转Qwen2.5:手把手你部署轻量级AI聊天机器人

本文介绍了如何在星图GPU平台上自动化部署🤖Qwen2.5-0.5B Instruct镜像,快速构建轻量级本地AI聊天机器人。该模型仅需1.8GB显存,支持流式文本生成,适用于代码辅助、周报撰写、学习解题等典型办公与育场景,真正实现零基础、高隐私、低槛的AI对话体验。

weixin_42515842的博客 280

Python Selenium+Requests爬虫[双线程]--今日头条图片爬取【亲测能行!!!】

首先需要准备好selenium、requests库以及Chromedriver 这个就不细说了,有很多博客可以参考 然后讲一下大题思 首先是向今日头条主页模拟发送搜索关键词,并模拟点击搜索 接着是模拟滑动页面,加载出更多结果 然后获取所加载出来的结果的“链接”(原谅我不太恰当的用词) 遍历获取的“链接”,访问每一个窗口 找到图片所在节点 保存图片链接到列表 遍历列表,下载图片 先...

薛定谔的壳的博客 2037

python爬取图虫网图库

本文首发于月小水长的个人博客 如何使用 下载工程源码 点击下载 或者git bash;git clone git@github.com:inspurer/PythonSpider.git 下载相关依赖 在命令行下依此输入 pip install requests pip install pyquery 打开图虫网 选择你喜欢的图库链接,比如https://tuchong.com/4...

月小水长 2724

Linux零基础入门:从虚拟机安装到核心命令实战指南

操作系统是计算机系统的核心软件,负责管理硬件资源并提供程序运行环境。Linux作为开源操作系统的代表,其内核设计遵循Unix哲学,具有稳定性高、资源占用少、安全性强等核心优势。在技术价值层面,Linux为服务器、云计算和容器化提供了坚实基础,是构建现代互联网基础设施的关键技术。对于开发者和运维工程师而言,掌握Linux命令行操作和系统管理能力,能显著提升工作效率和问题排查能力。本文聚焦于Linux学习径规划,通过虚拟机环境搭建和Ubuntu系统安装的实战演示,详细讲解文件系统结构、权限管理等核心概念,并系

areen7003的博客 422

天猫商城源代码变更对爬虫的影响

 断断续续学习爬虫已经半月有余,沉迷bug中无法自拔。这两天准备搭建基于requests库的小型网络爬虫标准框架用于天猫商城的任意商品的爬取。基础代码非常简洁明了,比其他代码清晰不少。然而昨天还能使用的代码,今天早上就不能用了,无法爬取任何内容,但是无代码错误。最后还是用print大法(大赞print大法)对各个变量和列表进行打印,逐个分析,发现是name列表出了问题,然而name列表是直接用be...

weixin_44076102的博客 336

最全python基础+数据分析+可视化程,千万别错过

巨大的数据量不是EXCEL能处理的,因此需要有一定的编程技能(主要应用到python和SQL,python学习开发都比较简单,SQL用来数据库取数。)还有必备的统计学基础、数据思维。

程序员小麦的博客 445
上一篇: 零基础如何学Python?如何学Python从0到1?
下一篇: Python该怎样学?大家是如何快速掌握Python的?(非常详细)
Python王饱饱
博客等级 码龄5年 504粉丝 165原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值