调试
通常有两种方法对Scrapy项目进行调试,一种是通过scrapy.shell,另一种是通过IDE的Debug功能。这里介绍第二种。
运行环境
- 语言:python 3.6
- IDE: VS Code
- 浏览器:Chrome
scrapy shell
在命令行中输入 scrapy shell 【想要访问的页面url】
成功后会进入scrapy shell进行操作:
response.xpath(‘……’)进行测试
IDE Debug
首先在items.py同级目录下,创建run.py
run.py
coding如下:
from scrapy import cmdline
name = 'douban_book_top250'
cmd = 'scrapy crawl {0}'.format(name)
cmdline.execute(cmd.split())
其中,name为之前spider的name属性,接着在spider文件中(或者你想要的位置)设置断点。接着,在vs code中选择调试即可。程序会在断点出暂停,我们就可以查看相应内容进行调试。
抓取公司信息项目
crawlerspider
接到一个任务,爬取类似黄页的网站,抓取公司的基本信息(名称、业务类别、电话、邮件)。登录网站,查看相关的url:
发现网站关于公司信息的url基本都是…/en/profile/数字+字母的格式,受小白进阶的启发,采用crawlerspider进行爬取。crawlerspider主要是对有规则的url进行爬取,代码如下:
import re
import scrapy
from scrapy.spiders import CrawlSpider, Rule, Request
from scrapy.linkextractors import LinkExtractor
from YellowPagesCrawler.items import YellowPagesCrawlerItem
class YPCrawler(CrawlSpider):
name = 'YPCrawler'
allowed_domains = ['yellowpages.co.th']
start_urls = ['http://www.yellowpages.co.th']
rules = (
Rule(LinkExtractor(allow=(),restrict_xpaths=('//a[@href]')),
callback='parse_item',follow=True),
)
def parse_item(self,response):
if (re.search(