文章适合于所有的相关人士进行学习
各位看官看完了之后不要立刻转身呀
期待三连关注小小博主加收藏
⚓️小小博主回关快 会给你意想不到的惊喜呀⚓️
介绍一下scrapy在爬虫中到底有多重要!!
嗯……就这么重要!
写一个爬虫,需要做很多的事情。比如:发送网络请求、数据解析、数据存储、反反爬虫机制(更换ip代理、设置请求头等)、异步请求等。这些工作如果每次都要自己从零开始写的话,比较浪费时间。因此Scrapy把一些基础的东西封装好了,在他上面写爬虫可以变的更加的高效(爬取效率和开发效率)。因此真正在公司里,一些上了量的爬虫,都是使用Scrapy框架来解决。
安装呢?我们简单一点
要使用Scrapy框架创建项目,需要通过命令来创建。首先进入到你想把这个项目存放的目录。然后使用以下命令创建:
scrapy startproject [项目名称]
那么我们怎么进入项目呢,这就需要运行后台了,cmd下进行操作逐步找到项目文件的地方然后在输入命令,完成项目的创建。
scrapy genspider [爬虫名称] [爬虫作用的域名]
爬虫的目录介绍:
items.py:用来存放爬虫爬取下来数据的模型。
middlewares.py:用来存放各种中间件的文件。
pipelines.py:用来将items的模型存储到本地磁盘中。
settings.py:本爬虫的一些配置信息(比如请求头、多久发送一次请求、ip代理池等)。
scrapy.cfg:项目的配置文件。
spiders包:以后所有的爬虫,都是存放到这个里面。
在做一个爬虫之前,一定要记得修改setttings.py中的设置。两个地方是强烈建议设置的。
1.ROBOTSTXT_OBEY设置为False。默认是True。即遵守机器协议,那么在爬虫的时候,scrapy首先去找robots.txt文件,如果没有找到。则直接停止爬取。
2.DEFAULT_REQUEST_HEADERS添加User-Agent。这个也是告诉服务器,我这个请求是一个正常的请求,不是一个爬虫。
也就是说我们在正式爬虫之前要把这两个提前设置好。
这里需要在最最最上方的目录中创建一个python项目,然后命名为start,写上下方程序,可以直接运行。
from scrapy import cmdline
cmdline.execute("scrapy crawl qsbk".split())
我们首先要在settings的demo中设置如下几个,首先把机器人协议关掉,然后我们在DEFAULT_REQUEST_HEADERS添加headers,还有就是我们打开爬虫管道。
ROBOTSTXT_OBEY = False
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36'
}
```python
ITEM_PIPELINES = {
'gsww.pipelines.GswwPipeline': 300,
}
这里是设置程序运行demo,要不然每次都需要在cmd后台运行很麻烦。
from scrapy import cmdline
cmds=['scrapy','crawl','gsww_spider']
cmdline.execute(cmds).split(" ")
import scrapy#导入scrapy框架
from scrapy.http.response.html import HtmlResponse
from scrapy.selector.unified import Selector
from ..items import GswwItem#从上一个文件items中导入GswwItem
class GswwSpiderSpider(scrapy.Spider):
name = 'gsww_spider'
allowed_domains = ['gushiwen.org','gushiwen.cn']
start_urls = ['https://so.gushiwen.cn/shiwens/default.aspx?page=1&tstr=&astr=&cstr=&xstr=']#从哪一个页面开始
def myprint(self,value):
print('='*30)
print(value)
print('='*30)
def parse(self, response):
gsw_divs=response.xpath("//div[@id='leftZhankai']/div[@class='sons']")#如上图,我们找到所有的sons,也就是所有的古诗
for gsw_div in gsw_divs:
title = gsw_div.xpath(".//b/text()").get()#找到标题
source = gsw_div.xpath(".//p[@class='source']/a/text()").getall()#z找到作者和朝代getall()
try:
author = source[0]
dynasty = source[1]
contents_list = gsw_div.xpath(".//div[@class='contson']//text()").getall()
content = "".join(contents_list).strip()
item = GswwItem(title=title, author=author, dynasty=dynasty, content=content)
yield item # 传给pipelines
except:
print(title)
#换页操作
next_href=response.xpath("//a[@class='amore']/@href").get()
if next_href:
next_href=response.urljoin(next_href)
request=scrapy.Request(next_href)
yield request
class GswwItem(scrapy.Item):
title = scrapy.Field()
author = scrapy.Field()
dynasty= scrapy.Field()
content = scrapy.Field()
最后我们在pipeline中将内容保存在文件当中。
class GswwPipeline:
def open_spider(self,spider):
self.fp=open("古诗文.txt","w",encoding="utf-8")
def process_item(self, item, spider):
self.fp.write(json.dumps(dict(item),ensure_ascii=False)+"\n")#把item的数据转化为json模式 json智能接受字典型数据
#结束一个则换行 json.dumps是将一个Python数据类型列表进行json格式的编码解析
# print("*"*30)
# print(item)
# print('*'*30)
return item
def close_spider(self,spider):
self.fp.close()
文章适合于所有的相关人士进行学习
各位看官看完了之后不要立刻转身呀
期待三连关注小小博主加收藏
⚓️小小博主回关快 会给你意想不到的惊喜呀⚓️