python爬虫概述

news/2024/7/19 12:29:41 标签: 爬虫, python, json

爬虫的使用:爬虫用来对网络的数据信息进行爬取,通过URL的形式,将数据保存在数据库中并以文档形式或者报表形式进行展示。

爬虫可分为通用式爬虫或特定式爬虫,像我们经常用到的搜索引擎就属于通用式爬虫,如果针对某一特定主题或者新闻进行爬取,则属于特定式爬虫

一般用到的第三方库有urllib、request、BeautifuiSoup。经常用到的框架为Scrapy和PySpider

爬虫的爬取步骤:

  1. 获取指定的url链接,获得链接网址上的所有代码信息。
  2. 通过python的正则表达式,将嵌套的HTML代码和数据进行分离。
  3. 获取数据后,保存在文档或者数据库中。方便后续的展示。

正常的网络传输大致分为Request(请求)和Response(响应)两类。

正常的HTTP请求一般分为get和post方法#

python">#使用urllib2编写最简单的爬虫代码
from urllib import request as urllib2
#在进行url请求时,应该添加User-Agent头进行识别

    header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Window
     s NT 6.1; Trident/5.0;"}

python">
request = urllib2.Request("http://www.baidu.com",headers=header )
python">response = urllib2.urlopen(request)
html = response.read()
print (html)

 我们爬取的数据可分为结构化和非结构化两种

  • 结构化数据:XML\JSON格式文件
  • 非结构化数据:文本、图片、HTML文件

lxml VS BeautifulSoup

lxml为局部遍历,效率较高。而BeautifulSoup为全局遍历,基于HTML DOM的,性能较差。

 

 

#使用requests编写爬虫代码
import
requests r = requests.get("http://www.baidu.com") print(r.status_code) #输出状态码 print(r.text) #输出返回文本 print(r.json) #输出json格式文件 print(r.url) #输出访问的url地址

 

Scrapy架构图

Engine:负责其他组件的运转流程调度。

Scheduler:接收引擎发过来的request请求,并对其进行整理排列。当需要时返还。

Downloader:下载引擎所发送的Requests请求,并将获得的Response交给引擎,由Spider来处理。

Spider:负责从Response中提取Item中需要的数据,并将其他的URL提交给引擎,再转交给Scheduler。

Item PipeLine:负责处理Spider中的Item,并进行后期处理。

Downloader Middlewares:扩展下载功能组件

Spider Middlewares:扩展引擎和Spider通信的功能组件

Scrapy不支持分布式,Scrapy-redis提供了以redis为基础的组件

爬虫策略:

  • 动态设置User-Agent(浏览器识别)
  • 禁用cookies
  •  使用VPN和代理IP

 反爬虫科普:https://segmentfault.com/a/1190000005840672

 

转载于:https://www.cnblogs.com/bkyf/p/10516305.html


http://www.niftyadmin.cn/n/1375881.html

相关文章

解决solr4.x搭建ik不能智能分词

下载IKAnalyzer-2012FF_hf1之后。与solr4.x匹配&#xff0c;但其文档中介绍的useSmart一直无法使用和生效。 schema配置如下&#xff1a; <span style"font-size:14px;"> <!--配置IK分词器--><fieldType name"text_ik" class"solr.Te…

图文并茂-Backup Exec 备份windows Oracle 10g

快放假了&#xff0c;事情不是很多&#xff0c;将之前的一些工作笔记发上来和大家分享下。以便下次大家遇到时&#xff0c;能方便解决。Backup Exec 2010备份oracle的教程很多&#xff0c;但是俗话说&#xff1a;光看不练假把式。看的简单&#xff0c;但是自己在做的时候会遇到…

用Stanford Parse(智能语言处理)去实现分词器

昨天研究学习了一下 Stanford Parse &#xff0c;想利用 Stanford Parse 智能切词的效果结合到lucene 分词器中的想法&#xff1b;由于项目时间 仓促&#xff0c;部分研究没有完成。代码还存在bug&#xff0c;希望有这方面想法的小伙伴们&#xff0c;能完善。。 lucene版本&a…

Leetcode 1.两数之和 哈希表

这是我第一次在Leetcode上写题&#xff0c;说实话&#xff0c;第一次不是太适应 题目链接https://leetcode-cn.com/problems/two-sum/ 没想到这么个"简单题"的解法还能这么巧妙 一、暴力 复杂度O(n^2) 用时320ms&#xff0c;内存消耗9.4MB class Solution { public:v…

去BAT面试完的Mysql面试题总结(55道,带完整答案)

1、一张表里面有ID自增主键&#xff0c;当insert了17条记录之后&#xff0c;删除了第15,16,17条记录&#xff0c;再把mysql重启&#xff0c;再insert一条记录&#xff0c;这条记录的ID是18还是15 &#xff1f; 2、mysql的技术特点是什么&#xff1f; 3、Heap表是什么&#xff1…

类加载器的工作原理

类加载器的工作原理 Java类加载器的作用就是在运行时加载类。Java类加载器基于三个机制&#xff1a;委托、可见性和单一性。委托机制是指将加载一个类的请求交给父类加载器&#xff0c;如果这个父类加载器不能够找到或者加载这个类&#xff0c;那么再加载它。可见性的原理是子…

Docker学习笔记之docker volume 容器卷的那些事(一)

预览目录 volume 方式 相关用例使用方式使用 volume driverbind mount 方式 相关用例使用方式配置selinux标签配置macOS的安装一致性tmpfs 方式 相关用例使用方式0x00 概述 接触 docker 的朋友都知道&#xff0c;docker 镜像是以 layer 概念存在的&#xff0c;一层一层的叠加&a…

NTFS 权限导致的程序疑难问题排查

家中台式电脑上的 Windows 7 是在前年刚买的时候装的&#xff0c;一直没有重装。在这期间没有使用任何第三方优化软件&#xff0c;但运行起来一切正常。这说明只要使用得当&#xff0c;Windows 完全可以很稳定的长期运行&#xff0c;不需要定期重装&#xff0c;也不需要使用优化…