scrapy主要的步骤:
- 创建一个scrapy项目
- 获取博客内容和保存
- 抓去url和title
- 储存标题和链接
- 获取文章内容
一.创建一个scrapy:
在桌面上会生成一个文件夹:
在开始爬虫前,打开items.py:
class BlogspiderTtem(scrapy.Item):
title=scrapy.Field()
link=scrapy.Field()
concent=scrapy.Field()
二.获取博客网页并保存:
1. 在blogSpider/spider创建一个eqwaak.py的文件,并制定爬取的范围:
import scrapy
class EqwaakSpider(scrapy.Spider):
name = 'eqwaak'
allowed_domains=['链接']
start_urls=['链接']
def parse(self, response):
pass
创建爬虫器,必须要继承scarpy.Spider类:
- name:爬虫名字的唯一名字
- allow_domains=[]:爬取域名下这个网页
- start_urls:爬虫会在启动爬取url列表
- parse():爬虫的一个方法,获取爬虫的response,解析网页
2.修改parse的内容:
def parse(self, response):
print(response.text)
filename="index.html"
with open(filename,'w',encoding='utf-8')as f:
f.write(response.text)
然后在cmd里面执行:
scrapy crwal 爬虫名字
三.提取博客标题和链接数据
修改eqwaak.py的代码:
import scrapy
from bs4 import BeautifulSoup
class EqwaakSpider(scrapy.Spider):
name = 'eqwaak'
allowed_domains=['']
start_urls=['']
def parse(self, response):
soup=BeautifulSoup(response.text,"lxml")
title_list=soup.find("h4",class_="blog-img-box-top").a.text.strip()
print('文章标题:',title_list)
for i in range(len(title_list)):
title=title_list[i].a.text.strip()
print('第%s篇文章标题是%s'%(i+1,title))
里面把提取的数据放入里面:
import scrapy
from bs4 import BeautifulSoup
from financeSpider.items import BlogspiderTtem
class EqwaakSpider(scrapy.Spider):
name = 'eqwaak'
allowed_domains=['链接']
start_urls=['链接']
def parse(self, response):
items=[]
soup=BeautifulSoup(response.text,"lxml")
title_list=soup.find("h4",class_="blog-img-box-top")
print('文章标题:',title_list)
for i in range(len(title_list)):
item=BlogspiderTtem()
title=title_list[i].a.text.strip()
link=title_list[i].a["herf"]
item["title"]=title
item["link"]=link
items.append(item)
return items
如果输出是josn格式,可以写:
scrapy crwal eqwaak -o article.json
如果输出是csv格式,可以写:
scrapy crwal eqwaak -o artticle.vsc
四.储存博客标题和链接 :
打开pipelines.py,代码:
class FinancespiderPipeline(object):
#保存地址
file_path="C:/Users/xuyix/Desktop/financeSpider/result.txt"
def __init__(self):
self.article=open(self.file_path,"a+",encoding="utf-8")
def process_item(self, item, spider):
title=item["title"]
link=item["link"]
content=item["content"]
output=title+'\t'+link+'\t'+content+'\n\n'
self.article.write(output)
return item
还需要修改setting里面的代码
取消注释 ITEM_PIPELINES = { "financeSpider.pipelines.FinancespiderPipeline": 300, }
在命令行输入:
scrapy crwal eqwaak
五.获取文章内容:
在eqwaak.py里面添加代码:
def parse2(self,response):
item=response.meta['item']
#解析文章内容
soup=BeautifulSoup(response.text,"lxml")
content=soup.find("div",class_="blog-img-box-top").text.strip()
content=content.replace("\n","")
item["content"]=content
yield item
删除text文件:
scrapy crwal eqwaak