python学习_新闻联播文字版爬虫(V 1.0版)
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版)的更多相关文章
- python学习_新闻联播文字版爬虫(V 1.0.1版)
更新记录: 1.新增了headers头的随机获取: 2.新增了logging模块添加日志信息(学习用): #!/usr/bin/env python # -*- coding: utf-8 -*- ' ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
- python学习_循环结构 and 类型判断
# 循环结构 ### 循环结构(while) - 格式 ```python while 表达式: 语句块 ``` > 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为 ...
- Python 学习(1) 简单的小爬虫
最近抽空学了两天的Python,基础知识都看完了,正好想申请个联通日租卡,就花了2小时写了个小爬虫,爬一下联通日租卡的申请页面,看有没有好记一点的手机号~ 人工挑眼都挑花了. 用的IDE是PyCh ...
- python学习_应用pickle模块封装和拆封数据对象
学习文件数据处理的时候了解到有pickle模块,查找官方文档学习了一些需要用到的pickle内容. 封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节 ...
- python学习笔记(14)--爬虫下载漫画图片修改版
说明: 1. 2017.3.12,周六从中午吃完包子12点多折腾了一下午加一个晚上,试了4个网站的爬虫,发现都不能下载!甚至前几天测试能下载的都不能用了! 2. 到晚上发现煎蛋网的可以用了,立即试了下 ...
- python学习笔记(11)--爬虫下载漫画图片
说明: 1. 某本子网站爬虫,现在只实现了扒取一页,已经凌晨两点了,又饿又困,先睡觉,明天再写总结吧! 2. 我是明天,我来写总结了! 3. 这个网站的结构是这样的: 主页: 主页-第1页-漫画1封面 ...
- Python学习_数据排序方法
Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2, ...
- Python学习_从文件读取数据和保存数据
运用Python中的内置函数open()与文件进行交互 在HeadFirstPython网站中下载所有文件,解压后以chapter 3中的“sketch.txt”为例: 新建IDLE会话,首先导入os ...
随机推荐
- LC 200 Number of Islands
问题描述 Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is ...
- package[golang]学习笔记之context
*关于context https://talks.golang.org/2014/gotham-context.slide#29
- Java中的自动拆装箱(转)
出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...
- javascript——加强for循环 和Java中的加强for循环的区别
javascript中获得的是下标 in var id=[4,5,6]; for (var index in id) { console.log(id[index]); } Java中获得的 ...
- word、ppt转换为pdf
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- O025、OpenStack 通用设计思路
参考https://www.cnblogs.com/CloudMan6/p/5427981.html API 前端服务 每个OpenStack组件可能包含若干子服务,其中必定有一个API服务负 ...
- 始终让footer在底部
1.footer保持在页面底部 需求: 我们希望footer能在窗口最底端,但是由于页面内容太少,无法将内容区域撑开,从而在 footer 下面会留下一大块空白 第一种方法:采用 flexbox布局模 ...
- .NET中跨线程访问winform控件的方法
1 第一种方式 MethodInvoker invoker = () => { richTextBox1.AppendText(_ClientSocketModelConnectedEvent. ...
- EBS常用表_Dictionary
EBS常用表:转载于 https://blog.csdn.net/xiariqingcao/article/details/8775827 . OU.库存组织 SELECT hou.organizat ...
- (转)Java垃圾回收基本过程
本编博客内容来自oschina,是一篇译文,文中图片比较直观的介绍了JVM进行垃圾回收的过程.原文内容来自oracle官网:Java Garbage Collection Basics oschina ...