将数据保存到 TXT 文本的操作非常简单,而且 TXT 文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索。所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用 TXT 文本存储。
本文中,我们就来看下利用 Python 保存 TXT 文本文件的方法。
我们以电影示例网站 https://ssr1.scrape.center/ 为例,爬取首页 10 部电影的数据,然后将相关信息存储为 TXT 文本格式。
首先,可以用 requests 将网页源代码获取下来,然后使用 pyquery 解析库解析,接下来将提取的电影名称、类别、上映时间等信息保存到 TXT 文本中,代码如下:
<span class="line">1</span>
<span class="line">2</span>
<span class="line">3</span>
<span class="line">4</span>
<span class="line">5</span>
<span class="line">6</span>
<span class="line">7</span>
<span class="line">8</span>
<span class="line">9</span>
<span class="line">10</span>
<span class="line">11</span>
<span class="line">12</span>
<span class="line">13</span>
<span class="line">14</span>
<span class="line">15</span>
<span class="line">16</span>
<span class="line">17</span>
<span class="line">18</span>
<span class="line">19</span>
<span class="line">20</span>
<span class="line">21</span>
<span class="line">22</span>
<span class="line">23</span>
<span class="line">24</span>
<span class="line">25</span>
<span class="line">26</span>
<span class="line">27</span>
<span class="line"><span class="keyword">import</span> requests</span>
<span class="line"><span class="keyword">from</span> pyquery <span class="keyword">import</span> PyQuery <span class="keyword">as</span> pq</span>
<span class="line"><span class="keyword">import</span> re</span>
<span class="line">url = <span class="string">'https://ssr1.scrape.center/'</span></span>
<span class="line">html = requests.get(url).text</span>
<span class="line">doc = pq(html)</span>
<span class="line">items = doc(<span class="string">'.el-card'</span>).items()</span>
<span class="line">file = open(<span class="string">'movies.txt'</span>, <span class="string">'w'</span>, encoding=<span class="string">'utf-8'</span>)</span>
<span class="line"><span class="keyword">for</span> item <span class="keyword">in</span> items:</span>
<span class="line"> <span class="comment"># 电影名称</span></span>
<span class="line"> name = item.find(<span class="string">'a > h2'</span>).text()</span>
<span class="line"> file.write(<span class="string">f'名称: <span class="subst">{name}</span>\n'</span>)</span>
<span class="line"> <span class="comment"># 类别</span></span>
<span class="line"> categories = [item.text() <span class="keyword">for</span> item <span class="keyword">in</span> item.find(<span class="string">'.categories button span'</span>).items()]</span>
<span class="line"> file.write(<span class="string">f'类别: <span class="subst">{categories}</span>\n'</span>)</span>
<span class="line"> <span class="comment"># 上映时间</span></span>
<span class="line"> published_at = item.find(<span class="string">'.info:contains(上映)'</span>).text()</span>
<span class="line"> published_at = re.search(<span class="string">'(\d{4}-\d{2}-\d{2})'</span>, published_at).group(<span class="number">1</span>) \</span>
<span class="line"> <span class="keyword">if</span> published_at <span class="keyword">and</span> re.search(<span class="string">'\d{4}-\d{2}-\d{2}'</span>, published_at) <span class="keyword">else</span> <span class="literal">None</span></span>
<span class="line"> file.write(<span class="string">f'上映时间: <span class="subst">{published_at}</span>\n'</span>)</span>
<span class="line"> <span class="comment"># 评分</span></span>
<span class="line"> score = item.find(<span class="string">'p.score'</span>).text()</span>
<span class="line"> file.write(<span class="string">f'评分: <span class="subst">{score}</span>\n'</span>)</span>
<span class="line"> file.write(<span class="string">f'<span class="subst">{"=" * <span class="number">50</span>}</span>\n'</span>)</span>
<span class="line">file.close()</span>
这里主要是为了演示文件保存的方式,因此 requests 异常处理部分在此省去。首先,用 requests 提取首页的 HTML 代码,然后利用 pyquery 将电影的名称、类别、上映时间、评分信息提取出来。
利用 Python 提供的 open 方法打开一个文本文件,获取一个文件操作对象,这里赋值为 file,每提取一部分信息,就利用 file 对象的 write 方法将提取的内容写入文件。
全部提取完毕之后,最后调用 close 方法将其关闭,这样抓取的内容即可成功写入文本中了。
运行程序,可以发现在本地生成了一个 movies.txt 文件,其内容如图所示。
这样电影信息的内容就被保存成文本形式了。
回过头来我们看下本节重点需要了解的内容,就是文本写入操作,其实就是 open、write、close 这三个方法的用法。
这里 open 方法的第一个参数即要保存的目标文件名称;第二个参数为 w,代表以覆盖写入的方式写入文本;另外,我们还指定了文件的编码为 utf-8。最后,写入完成后,还需要调用 close 方法来关闭文件对象。
在刚才的实例中,open 方法的第二个参数设置成了 w,这样在每次写入文本时会清空源文件,然后将新的内容写入文件,这是一种文件打开方式。关于文件的打开方式,其实还有其他几种,这里简要介绍一下。
另外,文件写入还有一种简写方法,那就是使用 with as 语法。在 with 控制块结束时,文件会自动关闭,所以就不需要再调用 close 方法了。
这种保存方式可以简写如下:
<span class="line">1</span>
<span class="line">2</span>
<span class="line">3</span>
<span class="line">4</span>
<span class="line">5</span>
<span class="line"><span class="keyword">with</span> open(<span class="string">'movies.txt'</span>, <span class="string">'w'</span>, encoding=<span class="string">'utf-8'</span>):</span>
<span class="line"> file.write(<span class="string">f'名称: <span class="subst">{name}</span>\n'</span>)</span>
<span class="line"> file.write(<span class="string">f'类别: <span class="subst">{categories}</span>\n'</span>)</span>
<span class="line"> file.write(<span class="string">f'上映时间: <span class="subst">{published_at}</span>\n'</span>)</span>
<span class="line"> file.write(<span class="string">f'评分: <span class="subst">{score}</span>\n'</span>)</span>
上面便是利用 Python 将结果保存为 TXT 文件的方法,这种方法简单易用,操作高效,是一种最基本的保存数据的方法。
本节我们了解了基本 TXT 文件存储的实现方式,建议熟练掌握。
本文链接:http://so.lmcjl.com/news/7289/