python3的爬虫练习,爬取的是新闻联播文字版网站

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
__author__ = 'wyf349'
__mtime__ = '2019/12/20'
'''
'''第一个版本,用来获取文件的链接和信息,并存储在txt文件中''' #import 相关的库
import requests
from bs4 import BeautifulSoup
import io
import sys
import re
import os
import time def getRespose(url):
'''requests获取response文本'''
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'}
try:
r = requests.get(url, headers=headers, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
print('链接异常:'+ url)
return False def getNowUrls(url,mode=1):
'''解析列表文章的链接和文章名'''
URL_all_set = set()
URL_next_page_set = set()
soup = BeautifulSoup(getRespose(url), 'html.parser')
if mode == 1 :
try:
for line in soup.body.find(class_='xwlist').find_all(name = 'a'):
url_point = line.attrs['href']
#print(url_point)
#print(URL_all)
if url_point not in URL_all_set:
URL_all_set.add(url_point)
return URL_all_set
except:
print('页面url获取失败,Urls_list')
return False
else:
try:
url_next = soup.body.find(class_='page now-page').next_sibling.next_sibling.attrs['href']
if url_next not in URL_next_page_set:
URL_next_page_set.add(url_next)
return URL_next_page_set
else:
print('链接: ' + url_next + '已存在!')
return False
except:
print('获取下一页地址失败,Url_next')
return False def gettext(url):
try:
demo = getRespose(url)
soup_text = BeautifulSoup(demo, 'html.parser') Text_title = soup_text.head.title.string
Text_text = soup_text.body.find(attrs={'class':'text_content'}).p.string
return Text_title, Text_text
except:
print('新闻页面解析失败!')
return False def TextWriter(url, file_path=r'.\temp', file_name=r'新闻联播.txt'):
file_all = file_path + '\\' + file_name
if gettext(url):
Get_text_list = gettext(url)
if not os.path.exists(file_path): # os库判断路径是否存在
os.mkdir(file_path) # 不存在创建路径
try:
with open(file_all, r'a+', encoding="utf8") as f:
f.write(Get_text_list[0] + '\n')
f.write(str(Get_text_list[1]) + '\n') # 此处写入失败的原因为该文本为list格式,需要转化为str
f.flush() # 将缓存写入
f.close()
print('文件写入成功')
except:
print('文本写入失败')
return False def main(url):
URL_all = getNowUrls(url,1)
URL_next_page = getNowUrls(url,2)
for url_line in list(URL_all):
TextWriter(url_line, file_path=r'.\temp', file_name=r'新闻联播.txt')
URL_all.remove(url_line)
# print('采集列表:',URL_all)
# print('下一页:' , URL_next_page)
if len(URL_all) == 0 and len(URL_next_page) == 1:
Next_url = list(URL_next_page)[0]
URL_next_page.remove(Next_url)
time.sleep(1)
main(Next_url) if __name__ == '__main__':
url = r'http://www.xwlb.top/xwlb.html'
main(url)

  

python学习_新闻联播文字版爬虫(V 1.0版)的更多相关文章

  1. python学习_新闻联播文字版爬虫(V 1.0.1版)

    更新记录: 1.新增了headers头的随机获取: 2.新增了logging模块添加日志信息(学习用): #!/usr/bin/env python # -*- coding: utf-8 -*- ' ...

  2. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  3. python学习_循环结构 and 类型判断

    # 循环结构 ### 循环结构(while) - 格式 ```python while 表达式: 语句块 ``` > 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为 ...

  4. Python 学习(1) 简单的小爬虫

    最近抽空学了两天的Python,基础知识都看完了,正好想申请个联通日租卡,就花了2小时写了个小爬虫,爬一下联通日租卡的申请页面,看有没有好记一点的手机号~   人工挑眼都挑花了. 用的IDE是PyCh ...

  5. python学习_应用pickle模块封装和拆封数据对象

    学习文件数据处理的时候了解到有pickle模块,查找官方文档学习了一些需要用到的pickle内容. 封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节 ...

  6. python学习笔记(14)--爬虫下载漫画图片修改版

    说明: 1. 2017.3.12,周六从中午吃完包子12点多折腾了一下午加一个晚上,试了4个网站的爬虫,发现都不能下载!甚至前几天测试能下载的都不能用了! 2. 到晚上发现煎蛋网的可以用了,立即试了下 ...

  7. python学习笔记(11)--爬虫下载漫画图片

    说明: 1. 某本子网站爬虫,现在只实现了扒取一页,已经凌晨两点了,又饿又困,先睡觉,明天再写总结吧! 2. 我是明天,我来写总结了! 3. 这个网站的结构是这样的: 主页: 主页-第1页-漫画1封面 ...

  8. Python学习_数据排序方法

    Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2, ...

  9. Python学习_从文件读取数据和保存数据

    运用Python中的内置函数open()与文件进行交互 在HeadFirstPython网站中下载所有文件,解压后以chapter 3中的“sketch.txt”为例: 新建IDLE会话,首先导入os ...

随机推荐

  1. 老贾的第二天(git常用命令)

    git init #创建一个本地的仓库 **git add test.txt #指定文件添加 ***git add . #当前文件夹下所有内容 添加到暂存区 ***git commit -m &quo ...

  2. the specified service is marked as deletion,can not find the file specified

    使用命令注册windows service sc create CCGSQueueService binpath= "D:\DKX4003\services\xxx.xx.xx\xxx.ex ...

  3. arcgisJs之featureLayer中feature的获取

    arcgisJs之featureLayer中feature的获取 在featureLayer中source可以获取到一个Graphic数组,但是这个数组属于原数据数组.当使用 applyEdits修改 ...

  4. C# 移除数组中重复项

    方法一: static void Main(string[] args) { //看到数组的第一反应应该是排序 ,,,,,,,}; //去掉数组中重复的项 //先排序 arrayAsc(array); ...

  5. openlayers 地图移动缩放动画

    map.getView().animate({ // 只设置需要的属性即可 center: [data.jd, data.wd], // 中心点 zoom: 11, // 级别 rotation: u ...

  6. 上传图片,语音,和富文本(webuploader,dropzone, froala)

    首先是上传图片,使用的百度webuploader 自己修改后可以实例化多个uploader对象: HTML: <!DOCTYPE html> <html xmlns="ht ...

  7. 7、TortoiseSVN

    7.TortoiseSVN TortoiseSVN图标介绍: 目录空白处右键→TortoiseSVN→Settings 7.1独立将工程上传到服务器的思路 12.2针对archetype-catalo ...

  8. docker一键搭建Nginx+PHP环境(含自动部署命令)

    文章的主要部分是一步一步的教程,文章的最后是我整理好的一键安装命令,自动下载并安装docker,构建镜像,启动容器集群(压缩包内注释覆盖范围达到80%) 大家可以看完教程亲自尝试下,也可以直接执行一键 ...

  9. ElementUI Hello World

    Vue Element UI Hello World <!DOCTYPE html> <html> <head> <meta charset="ut ...

  10. 第十五章·Kibana深入-Dev Tools及Lucene语法

    Dev Tools介绍 Dev Tools 页面包含开发工具,您可以使用这些Dev Tools与Kibana中的数据进行交互. 原先的交互式控制台Sense,使用户方便的通过浏览器直接与Elastic ...