Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试,有时也称为蜘蛛或蜘蛛机器人,通常简称为爬虫。
为什么要用Scrapy?
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。
可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy 使用 Twisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活地完成各种需求。Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧。
Scrapy是一个用python编写的框架,可以简化这一过程。使用此工具可以构建复杂程度各异的爬虫。
Scrapy演示,我将使用提供的查询字符串并从Google爬取相关链接。
代码
首先,导入相关的库
import scrapy
import re
from scrapy.linkextractors import LinkExtractor
import sys
from scrapy import Selector
给google url分配给一个变量。
gURL = 'https://www.google.com/search?q='
现在定义类。
class webSpider(scrapy.Spider):
name = 'webCrawler'
start_urls = []
QUERYSTRING = ''
webSpider是类的名称。 webCrawler是搜索器的名称。在scrapy框架内,将使用该名称创建一个项目。 start_urls = []是scrapy进行抓取的网址列表,而QUERYSTRING是Google查询
可以在Scrapy的框架内调用Scrapy,并通过Scrapy的外壳对其进行测试。
def __init__(self, QUERY, *argv, **kwargv):
super(webSpider, self).__init__(*argv, **kwargv)
self.QUERYSTRING = QUERY
self.start_urls = [gURL+QUERY]
现在,我可以从外部脚本调用Google QUERY,并在start_urls中加载Google搜索的基本URL 。如果scrapy看到start_urls,它将加载列表中提到的url并启动爬网。现在的目的是爬取Google报告的搜索结果。
定义parse函数:
def parse(self, response):
xlink = LinkExtractor()
link_list=[]
for link in xlink.extract_links(response):
if len(str(link))>200 or self.QUERYSTRING in link.text:
surl = re.findall('q=(http.*)&sa', str(link))
if surl:
link_list.extend(surl)
print(link_list)
scrapy加载start_urls中提到的URL并发出标准的HTTP请求。此函数将解析响应,遍历LinkExtractor检索到的每个链接,检索文本中是否存在我们需要的Google查询,通过正则表达式提取URL并将其存储在列表。
使用外部python脚本调用运行:
#!/usr/bin/env python3
import scrapy
from scrapy.crawler import Crawler, CrawlerProcess
from myspider import webSpider
QUERY = 'what+is+ethical+hacking'
crawler = Crawler(webSpider)
process = CrawlerProcess()
process.crawl(webSpider, QUERY)
process.start()
有了这个脚本,每当你有一个查询要在google中搜索时,你要做的就是用你的搜索字符串更新变量QUERY并运行。注意:我们之前编写的Spider类需要导入到该文件中。现在检索到的链接可以在需要时用于进一步的抓取。
在这里还是要推荐下我自己建的Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!