python scrapy框架爬取CNKI数据

3 篇文章 0 订阅
2 篇文章 0 订阅

1、找到一个比官网更容易分析的接口,但貌似里头的信息不全,只有前76页的信息。


2、如何让scrapy按顺序爬取页面:


1)直接从网页中抓取下一页的url,不要自己定义:

# -*- coding: utf-8 -*-
import scrapy
import re
import time
from CNKISpider.items import CnkispiderItem
import urllib.request
from urllib.error import URLError
from lxml import etree


class CnSpider(scrapy.Spider):
    name = 'CN'
    allowed_domains = ['search.cnki.com.cn']
    start_urls = ['http://search.cnki.com.cn/Search.aspx?q=%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86&rank=citeNumber&cluster=all&val=&p=0',
                 ]

    def parse(self, response):
    	try:
    		url = response.xpath('.//*[@id="page"]/a[11]/@href').extract()[0]
    	except:
    		url = response.xpath('.//*[@id="page"]/a[10]/@href').extract()[0]
    	url_1 = 'http://search.cnki.com.cn/'
    	task_url = 	url_1 + url
    	print('****************爬取task_url: ', task_url ,' **************************')
    	time.sleep(1)

    	if response.url != task_url:
    		yield scrapy.Request(url=task_url, callback=self.parse)
    	else:
    		print('\n************************无更多任务*****************************')

2)自定义要爬取的url,解析一个丢一个。

# -*- coding: utf-8 -*-
import scrapy
import re
import time
from CNKISpider.items import CnkispiderItem
import urllib.request
from urllib.error import URLError
from lxml import etree


class CnSpider(scrapy.Spider):
    name = 'CN'
    allowed_domains = ['search.cnki.com.cn']
    start_urls = ['http://search.cnki.com.cn/Search.aspx?q=%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86&rank=citeNumber&cluster=all&val=&p=0',
                 ]

    task_urls = []
    for i in range(0, 70):
        task_url = 'http://search.cnki.com.cn/Search.aspx?q=%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86&rank=citeNumber&cluster=all&val=&p='+ str(15*i)
        task_urls.append(task_url)
    print('共爬取',len(task_urls),'页')

    def parse(self, response):
    	count = len(self.task_urls) - 1
    	if count != 0:
    		print('剩余', count, '个页面\n')
    		if first_url == urls[0] and last_url == urls[-1]:
    			self.task_urls.remove(response.url)
    			print('\n\n**************task_urls[0]:', self.task_urls[0],'****************')
    			yield scrapy.Request(url=self.task_urls[0], callback=self.parse)
    	else:
    		print('\n************************无更多任务*****************************')

源代码。

以上。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python scrapy框架Python中的一个优秀的爬虫框架。它专门用于爬取包含大量数据网页,具有高效、稳定、易用的特点,可以很好地应用于各种数据挖掘、分析等领域。 使用Python scrapy框架爬取“房天下”网站房源数据,首先需要了解“房天下”网站的结构和网页的布局。可以利用浏览器开发工具查看网页源代码,找出房源数据的元素和标签,以便在 scrapy 代码中进行定位。 接着,需要创建一个 scrapy 项目,并编写 scrapy 爬虫代码。scrapy 爬虫程序一般包括爬虫程序、数据处理程序、数据存储程序等几个部分。在爬虫程序中,可以定义爬虫的启动页面、爬虫的操作逻辑和数据的提取方式。在数据处理程序中,可以进行数据清洗、去重、归类等处理。在数据存储程序中,可以将数据存储到数据库或文件中,方便后续的分析和使用。 在爬取“房天下”网站房源数据时,需要注意反爬虫措施。一般情况下,可以在请求头中添加一些随机值和Referer值等信息,模拟浏览器的正常访问行为,避免被网站屏蔽。同时,还可以设置下载延迟、禁用Cookie等措施,保证爬虫操作的正常性和连续性。 总的来说,利用Python scrapy框架爬取“房天下”网站房源数据,需要对网站结构有深入的理解,并编写高效、稳定、规范的爬虫代码。只有这样才能大规模地爬取数据、处理数据和存储数据,获得数据挖掘和分析的收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值