本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于凌晨安全,作者 MoLing

1. 爬虫就是模拟浏览器抓取东西,爬虫三部曲:数据爬取、数据解析、数据存储

数据爬取:手机端、pc端数据解析:正则表达式数据存储:存储到文件、存储到数据库

2. 相关python库

爬虫需要两个库模块:requests和re

1. requests库

requests是比较简单易用的HTTP库,相较于urllib会简洁很多,但由于是第三方库,所以需要安装,文末附安装教程链接(链接全在后面,这样会比较方便看吧,贴心吧~)

requests库支持的HTTP特性:

保持活动和连接池、Cookie持久性会话、分段文件上传、分块请求等

Requests库中有许多方法,所有方法在底层的调用都是通过request()方法实现的,所以严格来说Requests库只有request()方法,但一般不会直接使用request()方法。以下介绍Requests库的7个主要的方法:

①requests.request()

构造一个请求,支撑一下请求的方法

具体形式:requests.request(method,url,**kwargs)

method:请求方式,对应get,post,put等方式

url:拟获取页面的url连接

**kwargs:控制访问参数

②requests.get()

获取网页HTM网页的主要方法,对应HTTP的GET。构造一个向服务器请求资源的Requests对象,返回一个包含服务器资源的Response对象。

Response对象的属性:

具体形式:res=requests.get(url)

code=res.text (text为文本形式;bin为二进制;json为json解析)

③requests.head()

获取HTML的网页头部信息,对应HTTP的HEAD

具体形式:res=requests.head(url)

④requests.post()

向网页提交post请求方法,对应HTTP的POST

具体形式:res=requests.post(url)

⑤requests.put()

向网页提交put请求方法,对应HTTP的PUT

⑥requests.patch()

向网页提交局部修改的请求,对应HTTP的PATCH

⑦requests.delete()

向网页提交删除的请求,对应HTTP的DELETE

#requests 操作练习

importrequestsimportre#数据的爬取

h ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}

response= requests.get('https://movie.douban.com/chart',headers=h)

html_str=response.text#数据解析

pattern = re.compile('') #.*? 任意匹配尽可能多的匹配尽可能少的字符

result =re.findall(pattern,html_str)print(result)

2. re正则表达式:(Regular Expression)

一组由字母和符号组成的特殊字符串,作用:从文本中找到你想要的格式的句子

关于 .*? 的解释:

3. xpath解析源码

importrequestsimportrefrom bs4 importBeautifulSoupfrom lxml importetree#数据爬取(一些HTTP头的信息)

h ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}

response= requests.get('https://movie.XX.com/chart',headers=h)

html_str=response.text#数据解析#正则表达式解析

defre_parse(html_str):

pattern= re.compile('

results=re.findall(pattern,html_str)print(results)returnresults#bs4解析

defbs4_parse(html_str):

soup= BeautifulSoup(html_str,'lxml')

items= soup.find_all(class_='nbg')for item initems:print(item.attrs['title'])#lxml解析

deflxml_parse(html_str):

html=etree.HTML(html_str)

results= html.xpath('//a[@class="nbg"]/@title')print(results)returnresults

re_parse(html_str)

bs4_parse(html_str)

lxml_parse(html_str)

4. python写爬虫的架构

从图上可以看到,整个基础爬虫架构分为5大类:爬虫调度器、URL管理器、HTML下载器、HTML解析器、数据存储器。

下面给大家依次来介绍一下这5个大类的功能:

① 爬虫调度器:主要是配合调用其他四个模块,所谓调度就是取调用其他的模板。

② URL管理器:就是负责管理URL链接的,URL链接分为已经爬取的和未爬取的,这就需要URL管理器来管理它们,同时它也为获取新URL链接提供接口。

③ HTML下载器:就是将要爬取的页面的HTML下载下来。

④ HTML解析器:就是将要爬取的数据从HTML源码中获取出来,同时也将新的URL链接发送给URL管理器以及将处理后的数据发送给数据存储器。

⑤ 数据存储器:就是将HTML下载器发送过来的数据存储到本地。

0x01 whois爬取

每年,有成百上千万的个人、企业、组织和政府机构注册域名,每个注册人都必须提供身份识别信息和联系方式,包括姓名、地址、电子邮件、联系电话、管理联系人和技术联系人一这类信息通常被叫做whois数据

importrequestsimportre

h={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}

response= requests.get('http://whois.chinaz.com/'+input("请输入网址:"),headers=h)print(response.status_code)

html=response.text#print(html)#解析数据

pattern = re.compile('class="MoreInfo".*?>(.*?)

',re.S)

result=re.findall(pattern,html)#方法一:#str = re.sub(' ',',',result[0])#print(str)#方法二:

print(result[0].replace('/n',','))

0x02 爬取电影信息

importrequestsimportreimporttime#count = [0,10,20,30,40,50,60,70,80,90]

h ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}

responce= requests.get('https://XX.com/board/4?offset=0', headers=h)

responce.encoding= 'utf-8'html=responce.text#解析数据 time.sleep(2)

patter = re.compile('class="name">.*?title="(.*?)".*?主演:(.*?)

.*?上映时间:(.*?)', re.S)#time.sleep(2)

result =re.findall(patter, html)print(result)

with open('maoyan.txt', 'a', encoding='utf-8') as f:for item in result: #读取result(以元组的形式储存)中的内容=》

for i initem:

f.write(i.strip().replace(' ', ','))#print(' ')

0x03 爬取图片

importrequestsimportreimporttime#数据的爬取img的url

defget_urls():

response= requests.get('http://XX.com/png/')

html_str=response.text#解析数据,得到url

pattern = re.compile('

results=re.findall(pattern,html_str)print(results)returnresults##下载图片

defdown_load_img(urls):for url inurls:

response=requests.get(url)

with open('temp/'+url.split('/')[-1], 'wb') as f:

f.write(response.content)print(url.split('/')[-1],'已经下载成功')if __name__ == '__main__':

urls=get_urls()

down_load_img(urls)

0x04 线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。

"""线程池"""

from concurrent.futures importThreadPoolExecutorimporttimeimportthreadingdefban_zhuang(i):print(threading.current_thread().name,"**开始搬砖{}**".format(i))

time.sleep(2)print("**员工{}搬砖完成**一共搬砖:{}".format(i,12**2)) #将format里的内容输出到{}

if __name__ == '__main__': #主线程

start_time =time.time()print(threading.current_thread().name,"开始搬砖")

with ThreadPoolExecutor(max_workers=5) as pool:for i in range(10):

p=pool.submit(ban_zhuang,i)

end_time=time.time()print("一共搬砖{}秒".format(end_time-start_time))

结合多线程的爬虫:

'''美女爬取'''

importrequestsimportrefrom urllib.parse importurlencodeimporttimeimportthreading#https://www.toutiao.com/api/search/content/?aid=24&app_name=web_search&offset=0&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20

defget_urls(page):

keys={'aid':'24','app_name':'web_search','offset':20*page,'keyword':'美女','count':'20'}

keys_word=urlencode(keys)

url= 'https://www.toutiao.com/api/search/content/?'+keys_word

response=requests.get(url)print(response.status_code)

html_str=response.text#解析"large_image_url":"(.*?)"

pattern = re.compile('"large_image_url":"(.*?)"',re.S)

urls=re.findall(pattern, html_str)returnurls#下载图片

defdownload_imags(urls):for url inurls:try:

response=requests.get(url)

with open('pic/'+url.split('/')[-1]+'.jpg','wb') as f:

f.write(response.content)print(url.split('/')[-1]+'.jpg',"已下载~~")exceptException as err:print('An exception happened:')if __name__ == '__main__':

start=time.time()

thread=[]for page in range(3):

urls=get_urls(page)#print(urls)

#多线程

for url inurls:

th= threading.Thread(target=download_imags,args=(url,))#download_imags(urls)

thread.append(th)for t inthread:

t.start()for t inthread:

t.join()

end=time.time()print('耗时:',end-start)

python爬虫详细步骤-Python爬虫入门,详细讲解爬虫过程相关推荐

  1. python数据科学系列:pandas入门详细教程

    导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...

  2. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    Git快速入门篇-- Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程) 前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问 ...

  3. python官方下载步骤-Python 下载及安装详细步骤

    安装python分三个步骤: *下载python *安装python *检查是否安装成功 1.下载Python (2)选择下载的版本 (3)点开Download后,找到下载文件 Gzipped sou ...

  4. python官网的sdk下载详细步骤-Python SDK(beta)

    Python SDK(beta) 更新时间:2018-03-23 17:26:00 概述 本文结合Link Develop,详细介绍如何基于Python SDK,实现物联网设备的设备注册.属性上报.事 ...

  5. 实战 | OpenCV实现纺织物缺陷检测->脏污、油渍、线条破损(详细步骤 + Python/C++源码)

    点击下方卡片,关注" OpenCV与AI深度学习" 视觉/图像重磅干货,第一时间送达! 导读 本文将介绍使用OpenCV实现纺织物缺陷检测(脏污.油渍.线条破损缺陷)的详细步骤 + ...

  6. python爬虫详细步骤-Python爬虫实践入门,超详细

    1.前言 学习Python二个多月啦,周末时开始兴趣学习爬虫,虽然有点概念,但是也折腾了大半天,下面就开始简要记录一下吧. 2.需要的准备 Python:需要基本的python语法基础 request ...

  7. python中国大学排名爬虫写明详细步骤-python网络爬虫入门实例:中国大学排名定向爬虫...

    中国大学排名定向爬虫的 设计和实现 一.环境安装: 1.选择一个适合自己的IDE(以下代码用Jupyter Notebook编写) 2.打开cmd,安装requests库和beautifulsoup4 ...

  8. python爬虫详细步骤-Python爬虫的两套解析方法和四种爬虫实现过程

    对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式.因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门.本文想针对某一网页对 python 基础 ...

  9. python中国大学排名爬虫写明详细步骤-python中国大学排名爬虫

    python 中国大学排名爬虫 首先,给一个最好大学网URL:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html, 点击这里进入 . 功能描述 ...

最新文章

  1. 从LeNet到GoogLeNet:逐层详解,看卷积神经网络的进化
  2. 回顾2018,正在改变未来游戏规则的技术
  3. 嵌入式里如何给内存做压力测试?不妨试试memtester
  4. 学好Python爬取京东知乎价值数据
  5. python分析pcap文件_利用Python库Scapy解析pcap文件的方法
  6. 在kubernetes上实现tomcat日志的持久化
  7. PHP毕业设计——许愿墙(有源码)
  8. PHP直播源码,直播系统源代码功能有哪些?
  9. 算法基础:NP完全问题
  10. v6使用手册 天正电气t20_T20电气软件官方版下载-TElecT20V6 附安装教程 - 河东下载站...
  11. An工具介绍之形状工具及渐变变形工具
  12. IME 消息 函数 常量
  13. 怎么开启2345加速浏览器的过滤弹窗广告
  14. frp内网穿透(Mac远程连接公司windows)
  15. 父亲有过目不忘的本事
  16. 注意啦,还没有支持64位系统的App开发者,务必在12月底前完成这件事
  17. 8086的两种工作模式_8086有哪两种工作模式?其主要区别是什么?
  18. 飞凌嵌入式丨千兆网之RGMII SGMII解析
  19. 软通python机试_软通机试练习题
  20. 双路微型计算机,十二核心至尊 Intel Xeon E5-2697 v2

热门文章

  1. 如何两个电脑共享文件实现多人编辑_四款花钱都难买到的良心软件,每一款都是电脑必备...
  2. 零基础python入门书籍推荐书目_铁粉看过来!送书啦,Python推荐书单,送书10本!...
  3. python统计字符串中每个单词出现的次数_python中每个单词出现的次数是一组字符串?...
  4. Wireshark:Usage in Ubuntu 18.04 distribution
  5. nginx 在负载均衡中 的配置 以获取真实IP
  6. Leetcode970. Powerful Integers强整数
  7. SQL Server(第二章) 字符串函数、日期时间函数、转换函数
  8. 关于使用python的open函数时报No Such File or DIr的错误
  9. 文本框字符串长度实时统计jQuery插件,兼容IE6+
  10. 研究生数学建模比赛日程安排