scrapy创建一个简单的不依靠项目的爬虫文件

本文介绍如何使用Scrapy框架创建一个简单的爬虫程序,通过示例代码详细解释了爬虫的创建过程,包括定义爬虫类、重写请求方法、处理响应等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 首先创建普通py文件
    内容如下:
 import scrapy
        class Demo(scrapy.Spider):
            name="demo"
            def start_requests(self):
                urls = ['https://www.qidian.com', "https://www.baidu.com"]
                for url in urls:
                    req=scrapy.Request(url,callback=None)
                    yield  req
            def parse(self, response):
                print(response.text)

这个demo继承了scrapy.Spider,爬虫的名字为"demo"这个最好和你的py文件名相同。
接下来重写start_requests方法,urls是一个要爬取网站的url的列表
scrapy.Request(url,callback=None)
这行代码用来发送请求,类似requests,urllib.request.urlopen
设置callback=None则可以将响应内容返回给parse回调函数,yield req相当于return req,即返回req内容,这个不同于将req放入list中然后返回一个list,这种方法可以获取到一个url则处理一个url并调用回调函数返回。这样写可以节约内存消耗,并且速度快,是一种无堵塞的方法。
parse是回调函数,你可以在这里面操作response 的信息

  1. 启动这个spider文件
    scrapy runspider spider文件名(带扩展名),这种方式会显示日志
    不显示日志可以使用:scrapy runspider demo1.py --nolog
### 使用 Scrapy 编写爬虫抓取微信客户端网页数据 为了使用 Scrapy 抓取微信客户端网页的数据,需要按照以下方式构建和配置 Scrapy 工程。以下是详细的说明: #### 1. 创建 Scrapy 工程 通过命令行工具初始化一个新的 Scrapy 工程: ```bash scrapy startproject wechat_spider ``` 这会生成一个名为 `wechat_spider` 的项目目录,其中包含了默认的文件结构。 --- #### 2. 定义 Spider 文件 在 `spiders/` 目录下创建一个新的 Python 文件用于定义具体的爬虫逻辑。例如,命名为 `wechat_client.py`。 在此文件中,需继承 `scrapy.Spider` 类,并设置必要的属性和方法[^3]。 ```python import scrapy class WeChatClientSpider(scrapy.Spider): name = 'wechat_client' # 爬虫的唯一标识名 allowed_domains = ['weixin.qq.com'] # 允许访问的域名范围 start_urls = [ 'https://weixin.qq.com/some_endpoint', # 替换为目标 URL 或入口点 ] def parse(self, response): """ 解析响应内容并提取所需数据。 :param response: 页面请求返回的内容 """ for item in response.css('div.some_class'): # 假设目标数据位于某个 CSS 选择器之下 yield { 'title': item.css('h1.title::text').get(), # 提取标题 'content': item.css('p.content::text').get(), # 提取正文 } next_page = response.css('a.next-page::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) # 继续追踪分页链接 ``` 上述代码展示了如何利用 `parse()` 方法解析 HTML 数据,并通过递归调用继续抓取更多页面。 --- #### 3. 配置 Items 和 Pipelines ##### (1) 定义 Item 结构 (`items.py`) Item 是一种容器,用于保存从网页中提取的信息。可以在 `items.py` 中定义如下字段: ```python import scrapy class WeChatItem(scrapy.Item): title = scrapy.Field() # 文章标题 content = scrapy.Field() # 正文内容 url = scrapy.Field() # 当前文章的 URL 地址 ``` ##### (2) 实现 Pipeline 存储逻辑 (`pipelines.py`) Pipeline 可以将提取到的数据存储至数据库或其他媒介。例如,存入 SQLite 数据库: ```python import sqlite3 class SqlitePipeline: def open_spider(self, spider): """当蜘蛛启动时打开连接""" self.conn = sqlite3.connect('wechat_data.db') self.cursor = self.conn.cursor() self.cursor.execute(""" CREATE TABLE IF NOT EXISTS articles ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT, url TEXT UNIQUE ) """) def process_item(self, item, spider): """处理每个传递过来的 item 并将其插入数据库""" try: self.cursor.execute(""" INSERT INTO articles (title, content, url) VALUES (?, ?, ?) """, (item['title'], item['content'], item['url'])) self.conn.commit() except Exception as e: print(f"Error inserting data into database: {e}") return item def close_spider(self, spider): """关闭蜘蛛时清理资源""" self.conn.close() ``` 最后,在 `settings.py` 中启用该 Pipeline: ```python ITEM_PIPELINES = {'wechat_spider.pipelines.SqlitePipeline': 300} ``` --- #### 4. 设置中间件(可选) 如果目标网站存在反爬机制,则可能需要调整 User-Agent 或者加入代理池支持。编辑 `middlewares.py` 添加自定义行为: ```python from scrapy import signals class CustomUserAgentMiddleware: @classmethod def from_crawler(cls, crawler): middleware = cls() crawler.signals.connect(middleware.spider_opened, signal=signals.spider_opened) return middleware def process_request(self, request, spider): request.headers.setdefault(b'User-Agent', b'Mozilla/5.0 (Windows NT 10.0; Win64; x64)') ``` 同样记得激活此中间件于 `settings.py`: ```python DOWNLOADER_MIDDLEWARES = { 'wechat_spider.middlewares.CustomUserAgentMiddleware': 543, } ``` --- #### 5. 执行爬虫任务 完成以上步骤之后即可运行爬虫脚本: ```bash scrapy crawl wechat_client -o output.json ``` 此处 `-o output.json` 参数表示导出结果为 JSON 格式的文件。 --- ### 注意事项 - **合法性审查**:确保遵循目标站点的服务条款与隐私政策,避免触犯法律风险。 - **动态加载问题**:部分现代 Web 应用依赖 JavaScript 动态渲染内容,单纯依靠 Scrapy 足以应对这种情况;此时建议引入 Selenium 或 Playwright 辅助操作浏览器实例获取最终 DOM 树状态[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值