Python Scrapy爬虫框架使用示例浅析
作者:q56731523 发布时间:2023-01-28 16:27:45
示例
下面是一个简单的Python爬虫Scrapy框架代码示例,该代码可以抓取百度搜索结果页面中指定关键字的链接和标题等信息:
import scrapy
class BaiduSpider(scrapy.Spider):
name = 'baidu'
allowed_domains = ['www.baidu.com']
start_urls = ['http://www.baidu.com/s?wd=python']
def parse(self, response):
for link in response.css('h3 a'):
item = {'title': link.css('::text').get(),
'link': link.attrib['href']}
yield item
具体说明
首先定义了一个名为"BaiduSpider"的Spider类,继承自scrapy.Spider。其中name属性表示该爬虫的名称,allowed_domains属性表示可抓取的域名范围,start_urls属性则列出了需要抓取页面的初始URL地址。
在类中定义了一个名为"parse"的方法,用于处理抓取到的网页内容。在该方法中使用CSS选择器语法来提取页面中我们需要的信息,例如抓取标签下的链接和标题。
在parse方法中构造了一个dict类型的item对象,包含了每个链接对应的标题和URL地址。
最后,使用yield语句将item对象生成并返回,使得Scrapy框架将其转化为CSV、JSON或XML等格式的数据并保存在磁盘上。
该示例只是Scrapy框架代码的冰山一角,实际上Scrapy提供了大量的模块和工具类,例如Item、Pipeline、Downloader等组件,可协助完成页面解析、数据清洗、存储等操作。因此,在使用Scrapy进行爬虫开发时,需要仔细阅读官方文档,熟悉其API接口和机制。
Scrapy框架爬虫使用代理ip
在Scrapy框架中使用 * 进行网络爬取,需要先定义一个Downloader Middleware,用于向请求中添加代理。需要注意的是,代理服务器必须支持HTTP协议,否则无法正常工作。以下是一个基本的Scrapy爬虫 * 使用示例:
在settings.py中添加如下配置项:
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,
'my_project.middlewares.ProxyMiddleware': 410,
}
其中’scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware’是Scrapy默认提供的下载器中间件,它可以自动从settings.py文件中获取代理的信息;'my_project.middlewares.ProxyMiddleware’是我们自定义的下载器中间件,用来设置代理。
在项目目录下创建一个新的Python脚本middlewares.py,定义ProxyMiddleware类:
import random
class ProxyMiddleware(object):
# 代理服务器地址列表
def __init__(self, proxy_list):
self.proxies = proxy_list
@classmethod
def from_crawler(cls, crawler):
return cls(
proxy_list=crawler.settings.getlist('PROXY_LIST')
)
# 每次请求执行该方法,随机从代理池中选取一个代理发送请求
def process_request(self, request, spider):
proxy = random.choice(self.proxies)
request.meta['proxy'] = proxy
print('Use proxy: ', proxy)
其中proxy_list是代理服务器的地址列表,需要在settings.py文件中定义为配置项,如下所示:
PROXY_LIST = [
'http://123.45.67.89:8080',
'http://123.45.67.90:8080',
# ...
]
最后,在爬虫启动前需要指定运行命令时使用的设置文件和代理池地址,例如:
scrapy crawl my_spider -s PROXY_LIST='proxy_list.txt'
其中proxy_list.txt文件包含了代理服务器地址,每一行一个,例如:
http://123.45.67.89:8080
http://123.45.67.90:8080
这样,在进行网络请求时就可以自动使用随机的代理地址发送请求,提高爬虫数据抓取的效率和可靠性。
来源:https://blog.csdn.net/weixin_44617651/article/details/130679456
猜你喜欢
- 本文实例讲述了Python微信企业号文本消息推送功能。分享给大家供大家参考,具体如下:企业号的创建、企业号应用的创建、组、tag、part就
- 在日常开发中,我们进行用户登录的时候,大部分情况下都会使用 session 来保存用户登录信息,并以此为依据判断用户是否已登录。但其实 HT
- 矛盾出来了,像我们这些小作坊,基本都是设计布局一人搞定。甚至还有加后台程序的。假设设计的时候考虑布局了,我们都有这个能力进行调整。但像大公司
- docs = [‘icassp improved human face identification using frequency dom
- join用来连接字符串,split恰好相反,拆分字符串的。不用多解释,看完代码,其意自现了。>>>li = ['m
- 本文实例讲述了Python二叉树的遍历操作。分享给大家供大家参考,具体如下:# coding:utf-8"""
- 一份基于cnn的手写数字自识别的代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-import tensorflo
- 三、支持XML的公司和它们的开发工具 尽管XML还处在开发阶段,其标准正在由W3C组织制定,但是已经有许多公司表示全力支持XML,并开发了不
- 本代码将用到wxpy模块,使用前请确保已成功安装。我喜欢命令行安装:接着就可以开始码啦:开头的红色部分为注释,去掉仍然可以运行,有效代码仅七
- 1.Python3读取hdf文件最开始使用Python导入pyhdf包的时候是可以的,但是当导入pyhdf.SD的时候就出现了以下问题:我查
- 新标准的熟悉和入门内容: 还在用 HTML 编写文档?如果是的话,就不符合当前标准了。2000 年&
- CocosCreator在1.8版本开始,就支持一键发布微信小程序,下面是详细的发布步骤:1、在微信公众平台下载微信开发者工具 地
- Web2.0时代,体验式营销,体验式网站设计开始走向主流,那么体验式网站到底意味着什么?具体表现在那些地方?周末,根据建站的一点经验和观察,
- 我们平日办公时用得最多的软件是Execl、Word或WPS Office等,你的计算机中一定储存着大量的XLS、DOC、WPS文件吧!网页制
- 本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下:def matrixMultiply(A, B):
- 首先需要安装itchat库,可以pip install itchat安装,也可以在pycharm里安装# -*- coding:utf-8
- Selenium简介与安装 Selenium是什么? Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏
- 问题你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,A
- 前言由于Django是 * 站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,1.
- 较基础的SVM,后续会加上多分类以及高斯核,供大家参考。Talk is cheap, show me the codeimport tens