我想抓取中纪委网站的新闻,进行反腐学习。。。所以我学着用Scrapy框架写了一个爬虫。结果发现:
1. 我在将
http://www.ccdi.gov.cn/jlsc/index_1.html 设为起始页start_url的时候, 爬虫返回
[ccdi] DEBUG: Crawled (521) < GET http://ccdi.gov.cn/jlsc/index_1.html>
2. 我重新找了一个页面
http://www.ccdi.gov.cn/was5/web/search?channelid=202789&page=1 依然出现521状态码。
3. 我查了以下,
521状态码意思是: Protocol Extension Not Implemented 请问这是什么意思?是不是因为这个原因,我怎么设置都没法爬了?(只有首页http://www.ccdi.gov.cn/可以爬取)4. 我的代码贴在下面,请指正。
##更新了cookie的代码,但是似乎返回同样的结果。
#encoding: utf-8
import sys
import scrapy
import re
from scrapy.selector import Selector
from scrapy.http.request import Request
from ccdi.items import CcdiItem
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider,Rule
class CcdiSpider(CrawlSpider):
name = "ccdi"
allowed_domains = ["ccdi.gov.cn"]
start_urls = "http://www.ccdi.gov.cn/jlsc/index_2.html"
#rules = (
# Rule(SgmlLinkExtractor(allow=r"/jlsc/+", ),
# callback="parse_ccdi", follow=True),
#
#)
def start_requests(self):
yield Request(self.start_urls, cookies={'NAME':'Value'},callback=self.parse_ccdi)
def parse_ccdi(self, response):
item = CcdiItem()
self.get_title(response, item)
self.get_url(response, item)
self.get_time(response, item)
self.get_keyword(response, item)
self.get_text(response, item)
return item
def get_title(self,response,item):
title = response.xpath("/html/head/title/text()").extract()
if title:
item['ccdi_title']=title
def get_text(self,response,item):
ccdi_body=response.xpath("//div[@class='TRS_Editor']/div[@class='TRS_Editor']/p/text()").extract()
if ccdi_body:
item['ccdi_body']=ccdi_body
def get_time(self,response,item):
ccdi_time=response.xpath("//em[@class='e e2']/text()").extract()
if ccdi_time:
item['ccdi_time']=ccdi_time[0][5:]
def get_url(self,response,item):
ccdi_url=response.url
if ccdi_url:
print ccdi_url
item['ccdi_url']=ccdi_url
def get_keyword(self,response,item):
ccdi_keyword=response.xpath("//html/head/meta[@http-equiv = 'keywords']/@content").extract()
if ccdi_keyword:
item['ccdi_keyword']=ccdi_keyword
我想抓取中纪委网站的新闻,进行反腐学习。。。所以我学着用Scrapy框架写了一个爬虫。结果发现:
1. 我在将http://www.ccdi.gov.cn/jlsc/index_1.html 设为起始页start_url的时候, 爬虫返回
[ccdi] DEBUG: Crawled (521) < GET http://ccdi.gov.cn/jlsc/index_1.html>
2. 我重新找了一个页面 http://www.ccdi.gov.cn/was5/web/search?channelid=202789&page=1 依然出现521状态码。
3. 我查了以下,521状态码意思是: Protocol Extension Not Implemented 请问这是什么意思?是不是因为这个原因,我怎么设置都没法爬了?(只有首页http://www.ccdi.gov.cn/可以爬取)
4. 我的代码贴在下面,请指正。
##更新了cookie的代码,但是似乎返回同样的结果。
#encoding: utf-8 import sys import scrapy import re from scrapy.selector import Selector from scrapy.http.request import Request from ccdi.items import CcdiItem from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.contrib.spiders import CrawlSpider,Rule class CcdiSpider(CrawlSpider): name = "ccdi" allowed_domains = ["ccdi.gov.cn"] start_urls = "http://www.ccdi.gov.cn/jlsc/index_2.html" #rules = ( # Rule(SgmlLinkExtractor(allow=r"/jlsc/+", ), # callback="parse_ccdi", follow=True), # #) def start_requests(self): yield Request(self.start_urls, cookies={'NAME':'Value'},callback=self.parse_ccdi) def parse_ccdi(self, response): item = CcdiItem() self.get_title(response, item) self.get_url(response, item) self.get_time(response, item) self.get_keyword(response, item) self.get_text(response, item) return item def get_title(self,response,item): title = response.xpath("/html/head/title/text()").extract() if title: item['ccdi_title']=title def get_text(self,response,item): ccdi_body=response.xpath("//div[@class='TRS_Editor']/div[@class='TRS_Editor']/p/text()").extract() if ccdi_body: item['ccdi_body']=ccdi_body def get_time(self,response,item): ccdi_time=response.xpath("//em[@class='e e2']/text()").extract() if ccdi_time: item['ccdi_time']=ccdi_time[0][5:] def get_url(self,response,item): ccdi_url=response.url if ccdi_url: print ccdi_url item['ccdi_url']=ccdi_url def get_keyword(self,response,item): ccdi_keyword=response.xpath("//html/head/meta[@http-equiv = 'keywords']/@content").extract() if ccdi_keyword: item['ccdi_keyword']=ccdi_keyword … 显示全部