python scrapy爬虫基础教程
2022年5月24日大约 2 分钟约 660 字
scrapy架构图
scrapy安装
首先手动安装windows版本的
Twistedhttps://www.lfd.uci.edu/~gohlke/pythonlibs/#twistedpip install Twisted-18.4.0-cp36-cp36m-win_amd64.whl安装
scrapypip install -i https://pypi.douban.com/simple/ scrapywindows系统额外需要安装
pypiwin32pip install -i https://pypi.douban.com/simple pypiwin32
新建项目
开始一个项目
E:\svnProject> scrapy startproject TestSpider生成一个新的爬虫(generate)
E:\svnProject> cd TestSpider
E:\svnProject\TestSpider> scrapy genspider dongfeng www.dongfe.com # 默认使用basic模板启动一个爬虫
E:\svnProject\TestSpider> scrapy crawl dongfengSHELL模式
> scrapy shell http://www.dongfe.com/ # 命令行调试该网页
> scrapy shell -s USER_AGENT="" http://www.dongfe.com/ # 模拟用户代理调试该网页其他命令
> scrapy genspider --list # 查看爬虫模板
> scrapy genspider -t crawl dongfeng www.dongfe.com # 使用crawl模板生成爬虫scrapy的暂停和重启
方法一:
# 开始一个爬虫并保存进度到job_info/001/目录内
E:\svnProject\ArticleSpider> scrapy crawl lagou -s JOBDIR=job_info/001/
# 发送中断信号暂停爬虫并保存进度(只能按一次,如果按两次是强制停止。PyCharm的停止是强制停止)
> Ctrl+C
# 继续上一次的进度
E:\svnProject\ArticleSpider> scrapy crawl lagou -s JOBDIR=job_info/001/不同spider不能共用同一个目录;如果想重新开始请重新指定新目录。
方法二:
vim ArticleSpider/settings.py
JOBDIR = "job_info/001"方法三:
vim ArticleSpider/spiders/jobbole.py
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts/']
custom_settings = {
"JOBDIR": "job_info/001"
}
def parse(self, response):
passpycharm调试启动文件
E:\svnProject\TestSpider> vim main.py
import sys
import os
from scrapy.cmdline import execute
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BASE_DIR)
# scrapy crawl dongfeng
execute(["scrapy", "crawl", "dongfeng"])项目基本配置
E:\svnProject\TestSpider\TestSpider> vim settings.py
ROBOTSTXT_OBEY = False # 不要遵循网站robots文件
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR) # settings.py是scrapy命令的主入口
# 日志配置
LOG_LEVEL = "INFO" # 日志的最低级别
LOG_FILE = "info.log" # 在当前目录里创建logging输出文件的文件名给不同爬虫配置不同的Settings
>>> vim ArticleSpider/spiders/jobbole.py
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts/']
custom_settings = { # 重复项目会覆盖掉settings.py文件内的配置
"COOKIES_ENABLED": True
}
def parse(self, response):
passScrapy Telnet
telnet为了方便提供了一些默认定义的变量:
| 变量名 | 描述 |
|---|---|
| spider | 当前激活的爬虫(spider) |
| est | 打印引擎状态的报告 |
| ... |
telnet 127.0.0.1 6023
> est() # 查看当前爬虫状态
> spider.settings