python3 爬虫新手笔记(一):Beautiful Soup、Scrapy尝试

本文介绍了Python爬虫的基本架构,包括调度器、URL管理器、网页下载器、网页解析器和应用程序。深入探讨了BeautifulSoup和Scrapy的使用,涵盖了Spider编写、选择器使用、数据保存至MySQL以及Scrapy中的去重机制。

python3 爬虫新手笔记(一):Beautiful Soup、Scrapy尝试

一. python爬虫架构

Python爬虫介绍|菜鸟教程

Python 爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序(爬取的有价值数据)。

  • **调度器:**相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。
  • **URL管理器:**包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL,实现URL管理器主要用三种方式,通过内存、数据库、缓存数据库来实现。
  • **网页下载器:**通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2(Python官方基础模块)包括需要登录、代理、和cookie,requests(第三方包)
  • **网页解析器:**将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。
  • **应用程序:**就是从网页中提取的有用数据组成的一个应用。

二. Beautiful Soup 介绍

Python爬虫利器之Beautiful Soup的用法

Beautiful Soup 是Python的一个库,最主要的功能是从网页抓取数据。

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的的解析器,如果我们不安装它, 则Python会使用Python默认的解析器,lxml解析器更加强大,速度更快,推荐安装。

lxml HTML、lxml XML、html5lib的对比,以及beautiful soup的具体使用见网页。

三. Scrapy 介绍

1. 编写Spider

Scrapy入门教程

Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类。

其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成 item 的方法。

为了创建一个Spider,您必须继承 scrapy.Spider 类, 且定义以下三个属性:

  • name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
  • start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
  • parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

用于爬取 stackoverflow/tagged/blockchain 的spider实例:

class StackoverflowSpider(scrapy.Spider):
	name = "stackoverflow"
	allowed_domains = ["stackoverflow.com"]
	start_urls = [
		"https://stackoverflow.com/questions/tagged/blockchain"
	]
	#def parse(self, response):

	def __init__(self, *args, **kwargs):
		super(StackoverflowSpider, self).__init__(*args, **kwargs)


	def start_requests(self):

		return [Request(self.start_urls[0],callback=self.first_question)]
			

	def first_question(self, response):
        ......
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值