利用scrapy获取城市规划网某板块内容
http://www.planning.org.cn/news/newslist?cid=15&page=1
获取1-10页,所有新闻的标题、日期、发布机构、作者情况
思路
首先构建一级网址:10页,新闻标题页
获取二级网址:每一页的所有新闻的url地址
再利用scrapy获取相应信息
代码
首先新建一个文件夹,在这个路径下新建scrapy项目
scrapy startproject gh02
新建好了后,依次修改items文件,编写爬虫文件
首先修改items文件
import scrapy
class Ghnew02Item(scrapy.Item):
title = scrapy.Field() #把这里改成要获取的内容就好
date = scrapy.Field()
ins = scrapy.Field()
author = scrapy.Field()
然后修改编写爬虫文件
import scrapy
import ghnew02.items import Ghnew02Item
#就是刚刚修改的items文件中生成的类
class Gh02(scrapy.Spider):
name=' gh02' #爬虫名称,运行的时候输入
start_urls=[] #先为空,等下放入
for i in range(1,11):
url = "http://www.planning.org.cn/news/newslist?cid=15&page=" + str(i)
start_urls.append(url) #放入start_urls中了,共10页的一级网址
def parse(self,response):
url = response.url #这是一个相应的url
#reponse参数详解
#https://blog.csdn.net/l1336037686/article/details/78536694
res = response.xpath("/html/body/div[5]/div[1]/div/div/h4/a/@href").extract()
#xpath定位每一个新闻的url位置,并用@href返回
#如果返回普通的字符用text(),如果是网址链接用@href
#最后要用extract()
for url in res:
url = "http://www.planning.org.cn/"+ url
#获取二级网址
yield scrapy.Request(url,callback=self.parse2)
#等下定义第二个方法获取二级网址的信息,所以callback呼叫
#如果有二级网址操作,就要yield scrapy.Request()
def parse2(self,response):
item = Ghnew02Item()
item['title'] = response.xpath("//h2/text()").extract()
item['date'] = response.xpath("//div[6]/div[1]/div[2]/div/span[1]/text()").extract()
item['ins'] = response.xpath("//div/span[2]/text()").extract()[0].replace('\t','').replace('\n','').replace('\r','').replace('\t','')
item['author'] = response.xpath("//div[2]/div/span[3]/text()").extract()
return item
#最后结束用return item
文件完成,切换到文件夹地址运行就好
scrapy crawl gh02
#如果输出 scrapy crawl gh02 -o gh02.csv