本篇博文将介绍如何搭建爬虫项目实现简单地翻页爬取信息,并给出运行结果,把结果保存为本地json文件或者csv文件。详细的项目搭建操作已经在前面博文中提及了,可以参考:
https://blog.csdn.net/fallwind_of_july/article/details/97246577
文章非常适合入门的小伙伴们一起学习和研究。经过实测验证,代码可以成功运行。文章最后给出github免费的源码下载地址。
.
http://www.gz.gov.cn/gzgov/snzc/common_list.shtml
.
.
我们将要爬取公告的标题,时间以及链接,如下图所示:
我们不仅要爬取第一页,还要让程序自动爬取后面的页码。
.
用谷歌浏览器和xpath Helper插件,F12键来分析源代码
可以看出我们需要的名字、时间、链接对应的xpath分别是:
//ul[@class='news_list']/li/a
//ul[@class='news_list']/li/span
//ul[@class='news_list']/li/a/@href
.
items.py
文件import scrapy
class GzgovItem(scrapy.Item):
name = scrapy.Field()
time = scrapy.Field()
link = scrapy.Field()
以上文件定义我们获取信息的字段
.
pipelines.py
import json
class GzgovPipeline(object):
def __init__(self):
#self.f = open("gzgovment.json","w")
self.f = open("gzgovment.csv","w")
def process_item(self, item, spider):
content = json.dumps(dict(item),ensure_ascii=False) +",\n"
self.f.write(content)
return item
def close_spider(self,spider):
self.f.close()
以上文件定义我们保持数据的格式,写到本地文件中
.
settings.py
1.文件中下面的True改为False
ROBOTSTXT_OBEY = False
2.取消67行左右的注释,得到
ITEM_PIPELINES = {
'Gzgov.pipelines.GzgovPipeline': 300,
}
以上文件为配置文件
.
govmenu.py
爬虫文件名字自定义,在spiders目录下
# -*- coding: utf-8 -*-
import scrapy
from Gzgov.items import GzgovItem
#from scrapy.http import Request
class GovmenuSpider(scrapy.Spider):
name = 'govmenu'
allowed_domains = ['gz.gov.cn']
#start_urls = ['http://www.gz.gov.cn/gzgov/snzc/common_list.shtml']
baseURL = "http://www.gz.gov.cn/gzgov/snzc/common_list_"
offset = 1
end = ".shtml"
start_urls = ["http://www.gz.gov.cn/gzgov/snzc/common_list.shtml"]
def parse(self, response):
node_list = response.xpath("//ul[@class='news_list']/li")
for node in node_list:
item = GzgovItem()
item['name'] = node.xpath("./a/text()").extract()
item['time'] = node.xpath("./span/text()").extract()
item['link'] = node.xpath("./a/@href").extract()
yield item
if self.offset < 66:
self.offset +=1
url = self.baseURL + str(self.offset) + self.end
yield scrapy.Request(url,callback=self.parse)
以上文件的解释:
我们采用url拼接的方式进行数据的翻页爬取,
比如第二页的url就是:
http://www.gz.gov.cn/gzgov/snzc/common_list_2.shtml
以此类推,每次只需要修改数字部分即可。总共67个条目,因此我们判断<66。
.
到这里,我们就成功地实现了scrapy爬虫。
.
本文的源码下载(Gzgov文件夹):
https://github.com/AndyofJuly/scrapyDemo
如果有帮助到你,请点个赞或关注对博主进行鼓励,后续还会继续更新进阶的爬虫案例,有任何疑问请下方评论留言,感谢!