python基本网络爬虫代码_想知道如何用python实现网络爬虫呢?爬取想获得的一些数据,有没有代码框架?...

使用Scrapy框架。

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 Scrapy可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

使用Scrapy开发一个基于Python的爬虫非常简单,开发者只需要定制开发几个模块就可以轻松地实现一个爬虫,用来抓取网页数据。当然,要开发一个商业化的爬虫,还需要大量的开发工作,这些工作包括爬虫优化、爬取数据的存储及清洗。

要使用Scrapy,需要先安装Scrapy开发环境。因为Scrapy开发环境依赖一些外部库,在安装Scrapy之前,需要先安装依赖库。这里给出Windows操作系统下Scrapy及依赖库的安装。

依赖库lxml的安装

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。爬取的网页内容需要使用lxml来解析。

在Windows命令行窗口输入命令:

pip3 install pyOpenSSL

依赖库pyOpenSSL的安装

pyOpenSSL是Python一个支持数据安全的库,当爬虫爬取基于https协议的网站时,需要对请求数据进行加密,对爬取的数据也需要解密。

在Windows命令行窗口输入命令:

pip3 install pyOpenSSL

依赖库Twisted的安装

Twisted是Python一个网络编程库,完成客户端与服务端的通信,支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。

使用pip3安装Twisted库可能会失败,在这种情况下。可以在网上下载Twisted库的wheel文件。wheel文件是Python库的安装压缩包,将Python库对应的wheel文件下载到本地,再利用pip3来安装Python库。

Twisted库对应的wheel文件下载地址是:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

Twisted库提供了多个wheel文件,对应不同的Python版本和操作系统。为找到正确的wheel文件,需要在Windows命令行窗口输入“python -V”命令,查看当前Python的安装版本。

下载Twisted库的网站提供了Python不同模块的wheel文件,内容非常丰富,要找到Twisted库对应的wheel文件,可以在网页通过搜索“Twisted”定位到下载Twisted库的页面。

如上图所示,下载项中cp后面跟的数字代表该wheel文件对应的Python版本,38表示对应的是Python3.8版本。下载项中的win32表示对应32位Windows操作系统,win_amd64表示对应64位Windwos操作系统。

注意:下载的wheel文件名称不要改动。

在Windows命令行窗口输入命令:

pip3 install d:\python\Twisted-20.3.0-cp38-cp38-win_amd64.whl

命令中,install后面的内容是wheel文件的路径。

依赖库PyWin32的安装

PyWin32是Python一个封装了Windows API的库,使用该模块,Python程序可以方便地调用Windows API执行系统级别的功能。

在Windows命令行窗口输入命令:

pip3 install pyWin32

所有依赖库都已安装完成,现在可以安装Scrapy库了。

在Windows命令行窗口输入命令:

pip3 install Scrapy

构建爬取百度热点新闻的项目

学习爬虫开发的最好方法就是先有一个案例,然后由案例入手,抽丝剥茧,逐渐掌握爬虫技术的精髓。

下面使用Scrapy框架创建一个爬取百度热点新闻的案例,创建案例程序需要五个步骤:

(1) 使用Scrapy创建一个爬虫项目;

(2) 定义一个存储爬取数据的容器;

(3) 配置项目文件settings.py;

(4) 创建爬虫,编写代码;

(5) 运行爬虫程序。

使用Scrapy创建一个爬虫项目

在Windows命令行窗口,将存储项目文件的目录设置为当前目录,使用scrapy命令创建爬虫项目stock,项目名称可以是其它名称。

scrapy startproject stock

其中,scrapy是Scrapy框架提供的命令行程序,startproject是命令行程序的参数,该参数会创建一个新的爬虫项目,stock是项目名称。

该命令执行后,会在命令行窗口当前目录下创建stock目录,在stock目录存储了爬虫项目的相关文件。项目文件结构如下图所示:

※ spiders目录用于存储编写的爬虫业务逻辑代码;

※ item.py用于定义爬取数据的容器,item.py定义了一个类,该类可以定义要爬取数据的字段名称;

※ settings.py是项目的配置文件,用于设置项目的基础参数。如爬取数据的时间间隔、爬取时是否遵循 Robot 协议等;

※ pipelines.py用于对爬取的数据做进一步处理,如输出到json文件、mysql数据库等;

※ middlewares.py用于在scrapy爬取数据的流程中,开发者可以添加一些自定义的中间件,从而开发出适应不同情况的爬虫。

配置settings.py文件

settings.py是项目的配置文件,用于设置项目的基础参数。该配置文件可根据项目的需求随时更改配置项。

(1) 修改ROBOTSTXT_OBEY配置项

ROBOTSTXT_OBEY配置项用于配置爬虫是否遵循Robot 协议。在网站的根目录一般有 robots.txt 文件,该文件给出了允许爬虫爬取网页的范围,将该项设置为False,爬虫可以不受robots.txt 文件的约束。

ROBOTSTXT_OBEY = False

定义item容器

爬虫需要把爬取的数据存储到一个数据结构,item容器用来定义这样的数据结构。爬取网页之前,需要分析爬取网页的数据构成,在item.py文件定义与其对应的数据结构。

文件代码:

# 导入scrapy库

import scrapy

#自定义StockItem,用于存储爬虫所抓取的字段内容

class StockItem(scrapy.Item):

# define the fields for your item here like:

# name = scrapy.Field()

# 新闻标题

news_title = scrapy.Field()

# 新闻链接

news_link = scrapy.Field()

代码定义了news_title、news_link 数据字段,news_title存储百度热点新闻的标题,news_link存储百度热点新闻的超链接,这些数据字段的类型是Field类。

创建爬虫,编写代码

爬虫代码的入口文件由scrapy命令创建,进入Windows命令行窗口,把项目目录设置为当前工作目录,输入下面的命令创建爬虫入口文件。

scrapy genspider spider_stockstar news.baidu.com

scrapy命令的genspider参数是创建一个爬虫,spider_stockstar是爬虫的名称,爬虫名称可以选择其它名称,http://news.baidu.com是要爬取网页路径,也就是起始URL,也可以是其它网页路径。

命令执行完成后,scrapy会在项目的spiders目录下创建spider_stockstar.py文件。

文件代码如下:

import scrapy

class SpiderStockstarSpider(scrapy.Spider):

name = 'spider_stockstar'

allowed_domains = [' news.baidu.com ']

start_urls = [' https://news.baidu.com/ ']

def parse(self, response):

pass

allowed_domains定义爬虫爬取的范围,爬取范围被限定在http://news.baidu.com域名下,start_urls定义爬虫要爬取的起始网页,案例中起始网页的内容是百度新闻的首页。

parse是网页内容解析函数,需要自己编写解析代码。

import scrapy

# 导入scrapy选择器

from scrapy.selector import Selector

# 导入StockItem

from stock.items import StockItem

class SpiderStockstarSpider(scrapy.Spider):

name = 'spider_stockstar'

allowed_domains = ['news.baidu.com']

start_urls = ['https://news.baidu.com/']

def parse(self, response):

# 爬取下来的HTML代码

html = response.text

# 使用xpath表达式搜寻指定的a标签节点,节点以列表方式返回

item_nodes = response.xpath("//div[@class='hotnews']/ul/li/strong/a").extract()

# 遍历节点

for item_node in item_nodes:

# 使用xpath表达式获取节点的href属性值

a_href = Selector(text=str(item_node)).xpath('//@href').extract()

# 使用xpath表达式获取节点的文本内容

a_text = Selector(text=str(item_node)).xpath('//text()').extract()

item = StockItem()

item["news_title"] = a_text

item["news_link"] = a_href

# 使用yield语句返回item给parse的调用者

yield item

运行爬虫程序

在项目的stock目录下,建立main.py文件,用于运行爬虫。

文件代码如下:

from scrapy.cmdline import execute

execute(["scrapy","crawl","spider_stockstar","-o","items.json"])

scrapy 的execute函数用于在Python程序启动spider_stockstar爬虫,并将爬取的数据存储到items.json文件。函数的执行类似于在Windows命令行窗口执行下面的命令:

scrapy crawl spider_stockstar -o items.json

爬虫运行后,爬虫会把爬取的内容以JSON数据格式存储到项目的stock目录,JSON文件名称为items.json。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值