scrapy框架
scrapy框架是Python的主流爬虫框架之一,其主要功能包括爬取网络数据、提取结构性数据等。相信网上对于scrapy框架组件和工作流程的介绍数不胜数,我也就不班门弄斧啦,同时scrapy框架还提供了许多强大的命令行工具,如scrapy shell,scrapy parse ,scrapy fetch,scrapy view等,这些对于编写和测试爬虫大有裨益。
爬取网站介绍与分析
- 网站介绍
本次爬取的是美国生物医学信息网站中(https://www.ncbi.nlm.nih.gov/nuccore/)植物基因序列的信息,由于基因库种类繁多,这里以获取Coelogyne为例。 - 爬虫目的
爬取美国生物医学信息中心网站的植物基因序列信息 - 页面分析
采用JS分页加载,url通过post请求发送(formdata数据很多) - 抓取思路
1.分析formdata,获取当前页面数据
2.解析出相关链接字段并构建url(构建FASTA链接)
3.获取url的响应对象并解析出基因序列的链接字段(构建基因序列链接)
4.获取响应对象并提取出基因序列
5.实现翻页
核心代码
- items.py
# -*- coding: utf-8 -*-
import scrapy
class GovspiderItem(scrapy.Item):
ribonucleic_acid_sequence = scrapy.Field()
- spiders(gov.py)
# -*- coding: utf-8 -*-
import scrapy
from govspider.items import GovspiderItem
from govspider.settings import TERM,TOTAL_PAGE
import re
# 并发量32
# 下载延迟1s
class GovSpider(scrapy.Spider):
name = 'gov'
allowed_domains = ['ncbi.nlm.nih.gov']
start_urls = ['https://www.ncbi.nlm.nih.gov/nuccore/?term={}'.format(TERM)]
total_num = None
key = None
i = 0
j = 1 # 显示已经爬取的页数
def parse(self, response):
if self.j <= TOTAL_PAGE:
self.i += 1
if self.i == 1:
# 获取post请求需要的部分相关参数
self.total_num = response.xpath('//div[@class="title_and_pager"]/div/input[@name="EntrezSystem2.PEntrez.Nuccore.Sequence_ResultsPanel.Sequence_ResultsController.ResultCount"]/@value').getall()[0]
self.key = response.xpath('//div/input[@name="EntrezSystem2.PEntrez.Nuccore.Sequence_ResultsPanel.Sequence_DisplayBar.QueryKey"]/@value').getall()[0]
links = response.xpath('//div[@class="shortcuts"]/a[@class="dblinks"][2]/@href').getall()
# 构建每页FASTA链接请求对象
for i in links:
new_url = 'https://www.ncbi.nlm.nih.gov' + i
yield scrapy.Request(new_url,