wordpress 响应式 企业网站房地产网站广告销售怎么做
news/
2025/9/24 2:04:02/
文章来源:
wordpress 响应式 企业网站,房地产网站广告销售怎么做,好的学校网站设计,爱站网自媒体数据1 目标站点分析
抓取网站#xff1a;http://quotes.toscrape.com/ 主要显示了一些名人名言#xff0c;以及作者、标签等等信息#xff1a; 点击next#xff0c;page变为2#xff1a;
2 流程框架
抓取第一页#xff1a;请求第一页的URL并得到源代码#xff0c;进行下…1 目标站点分析
抓取网站http://quotes.toscrape.com/ 主要显示了一些名人名言以及作者、标签等等信息 点击nextpage变为2
2 流程框架
抓取第一页请求第一页的URL并得到源代码进行下一步分析。获取内容和下一页链接分析源代码提取首页内容获取下一页链接等待进一步爬取。翻页爬取请求下一页信息分析内容并请求再下一页链接。保存爬取内容将爬取结果保存为特定格式如文本数据库。
3 代码实战
新建一个项目
scrapy startproject quotetutorial创建一个spider(名为quotes) 使用pycharm来打开已经在本地生成的项目 scrapy.cfg:配置文件 items.py:保存数据的数据结构 middlewares.py:爬取过程中定义的一些中间件可以用来处理RequestResponse以及Exceptions等操作也可以用来修改Request, Response等相关的配置 pipelines.py:项目管道可以用来输出一些items settings.py:定义了许多配置信息 quotes.py:主要的运行代码
执行这个爬虫程序: 可以看到控制台中打印出了许多调试信息可以看出它和普通的爬虫不太一样Scrapy提供了很多额外的输出。
抓取第一页 1.更改QuotesSpider这个类,通过css选中quote这个区块 def parse(self, response):quotes response.css(.quote)for quote in quotes:text quote.css(.text::text).extract_first()author quote.css(.author::text).extract_first()tags quote.css(.tags . tag::text).extract()这样的解析方法和pyquery非常相似 .text :指的是标签的class. ::text :是Scrapy特有的语法结构表示输出标签里面的文本内容. extract_first() :方法表示获取第一个内容. extract :会把所有结果都找出来类似于find和findall).
说明Scrapy还为我们提供了一个非常强大的工具–shell在命令行中输入“scrapy shell quotes.toscrape.com”可以进入命令行交互模式 例如直接输入response回车后会直接执行这条语句。 试试刚才写的方法的效果先查看“response.css(’.quote’)”的输出 这是一个list类型的数据里面的内容是Selector选择器查看第一个结果此时若直接输入quotes会报错。 先执行quotes response.css(‘.quote’)然后quotes[0]。 .text和.text::text的区别data数据的输出和不输出 2.借助Scrapy提供的“items.py”定义统一的数据结构指定一些字段之类的将爬取到的结果作为一个个整体存下来。根据提示更改文件如下 3. 要在parse方法中调用我们刚才定义的items将提取出的网页信息存储到item然后调用yield方法将item生成出来。
获取内容和下一页链接 import scrapy
from quotetutorial.items import QuotetutorialItemclass QuotesSpider(scrapy.Spider):name quotesallowed_domains [quotes.toscrape.com]start_urls [https://quotes.toscrape.com]def parse(self, response):quotes response.css(.quote)for quote in quotes:item QuotetutorialItem()text quote.css(.text::text).extract_first()author quote.css(.author::text).extract_first()tags quote.css(.tags .tag::text).extract()item[text] textitem[author] authoritem[tags] tagsyield itemnext response.css(.pager .next a::attr(href)).extract_first()url response.urljoin(next)yield scrapy.Request(urlurl, callbackself.parse)最后调用Request第一个参数就是要请求的url第二个参数“callback”是回调函数的意思也就是请求之后得到的response由谁来处理这里我们还是调用parse因为parse方法就是用来处理索引页的这就相当于完成了一个递归的调用可以一直不断地调用parse方法获取下一页的链接并对访问得到的信息进行处理。
再次重新运行程序可以看到输出了10页的内容这是因为该网站只有10页内容
保存爬取到的信息
在原来的命令后面增加“-o 文件名称.json”爬取完成后就会生成一个“quotes.json”文件把获取到的信息保存成了标准的json格式。
scrapy crawl quotes -o quotes.jsonScrapy还提供了其它存储格式比如“jl”格式在命令行输入如下命令就可以得到jl格式文件。相比于json格式它没有了最前面和最后面的的大括号每条数据独占一行
scrapy crawl quotes -o quotes.jl或者保存成csv格式
scrapy crawl quotes -o quotes.csv它还支持xml、pickle和marshal等格式。 Scrapy还提供了一种远程ftp的保存方式可以将爬取结果通过ftp的形式进行保存例如
scrapy crawl quotes -o ftp://user:passftp.example.com/path/quotes.csv数据处理
在将爬取到的内容进行保存之前还需要对item进行相应的处理因为在解析完之后有一些item可能不是我们想要的或者我们想把item保存到数据库里面就需要借助Scrapy的Pipeline工具。 更改pipelines.py文件
# Define your item pipelines here
#
# Dont forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
from scrapy.exceptions import DropItem
import pymongoclass TextPipeline:def __init__(self):self.limit 50def process_item(self, item, spider):if item[text]:if len(item[text]) self.limit:item[text] item[text][0:self.limit].rstrip() ...return itemelse:return DropItem(Missing Text)class MongoPipeline(object):def __init__(self, mongo_uri, mongo_db):self.mongo_uri mongo_uriself.mongo_db mongo_dbclassmethoddef from_crawler(cls, crawler):return cls(mongo_uricrawler.settings.get(MONGO_URI),mongo_dbcrawler.settings.get(MONGO_DB))def open_spider(self, spider):self.client pymongo.MongoClient(self.mongo_uri)self.db self.client[self.mongo_db]def process_item(self, item, spider):name item.__class__.__name__self.db[quotes].insert(dict(item))return itemdef close_spider(self, spider):self.client.close()更改setting:
MONGO_URI localhost
MONGO_DB quotestutorialpipeline似乎没生效要想让pipeline生效需要在settings里面指定pipeline。 后面的序号300和400这样代表pipeline运行的优先级顺序序号越小表示优先级越高会优先进行调用。
MONGO_URI localhost
MONGO_DB quotestutorialITEM_PIPELINES {quotetutorial.pipelines.TextPipeline: 300,quotetutorial.pipelines.MongoPipeline: 400,
}将程序写好后我们可以再次运行命令行输入“scrapy crawl quotes”可以看到输出的text过长的话后面就被省略号代替了同时数据也被存入了MongoDB数据库。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914552.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!