Python爬取新闻并生成Excel和下载有关图片的学习
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python爬取新闻并生成Excel和下载有关图片的学习,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5594字,纯文字阅读大概需要8分钟。
内容图文
![Python爬取新闻并生成Excel和下载有关图片的学习](/upload/InfoBanner/zyjiaocheng/600/5e9afd78f6004abb8896cf89759febb4.jpg)
Python的学习是循序渐进
这是博主写的一段Python代码
代码仅供参考学习,不能用于商用
爬虫是用来爬取信息,进行学习的。本编程的书写者日常热爱看新闻,特别是观察者网和观视频网。
祝大家学习进步哦,加油!
侵权者必究
# -*- coding =utf-8 -*-
# @Time :2021/2/12 9:07
# @Author:强强
# @File : spider01.py
# @Software: PyCharm:PyCharm
from bs4 import BeautifulSoup # 网页解析
import re # 正则表达式,进行文字匹配
import urllib.request, urllib.error # 定制URL,获取网页数据
import xlwt # 进行excel操作
import urllib.parse
import requests
import time
# os.mkdir("D:\PythonProjects\project3\spider\img")
# 正则序列(调取信息的通式,利用正则表达式)
# 1.新闻标题的获取
findTitle = re.compile(r'<h4 class="module-title"><.*>(.*)</a></h4>')
# 2.新闻图片的获取
findImg = re.compile(r'<a class=".*?" target="_blank"><img alt="" height="259" src="(.*?)" width="365"/></a>', re.S)
# 3.新闻概况的获取
findDetail = re.compile(r'<p class="module-artile">(.*?)</p>')
# 4.新闻的链接
findLink = re.compile(r'<a class="static-img fl" href="(.*?)".*?>')
# 主要功能的执行程序
def main():
# 1.获取网页内容
baseurl = "https://www.guancha.cn/mainnews-yw/"//新闻的网址,可以更改
(datalistTitles, datalist2, datalist3, datalist4) = getData(baseurl)
return datalistTitles, datalist2, datalist3, datalist4
# 2.解析内容
# 3.保存内容
# 模拟浏览器,得到网页的源代码
def askURL(url):
head = { # 模拟浏览器头部信息,向服务器发送信息
"User-Agent": "Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36(KHTML,likeGecko) Chrome / 78.0.3904.108Safari / 537.36",
} # 用户代理,表示告诉服务器,我们是什么类型的机器,我们可以接受什么水平的文件
request = urllib.request.Request(url, headers=head) # 打包好头部信息
html = "" # 创建空的html变量,存储获取到的源代码
time.sleep(0.50)
print("数据正在搬运的路上,客官请稍后")
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8") # 将获取到的信息载入html字符串中
# print(html) # 打印出获取的数据 用于测试该函数是否正常运行
except urllib.error.URLError as e:
if hasattr(e, "code"): # 打印出错误的代码
print(e.code)
if hasattr(e, "reason"): # 获取错误的原因
print(e.reason)
return html
# 浏览器内容解析转化为数据
def getData(baseurl):
# 创建数组储存处理后的数据
datalistTitles = []
datalist2 = []
datalist3 = []
datalist4 = []
n = 1
for i in range(0, 15): # 注意左闭右开 目的调用获取页面信息的函数,15次
# 将源代码导出到变量
url = baseurl + str("list_%d.shtml" % (i + 1)) # 将得到的参数(askURL得到的网页的源代码)赋值给url,便于解析
print(url) # 调试遍历网页是否实现
html = askURL(url)
# 解析源代码,形成更加方便阅读的格式
soup = BeautifulSoup(html, 'html.parser')
module = soup.find_all('div', class_='main content-main') # 查找符合要求的字符串形成列表,删去一些不必要的字符串和代码
module = str(module)
# print(module) # 测试bs4是否正常工作
titles = re.findall(findTitle, module)
# print(titles) # 测试上面的正则表达式是否正常运行
imgUrl = re.findall(findImg, module)
# print(imgUrl) # 测试上面的正则表达式是否正常运行
grasp = re.findall(findDetail, module)
# print(grasp) # 测试上面的正则表达式是否正常运行
link = re.findall(findLink, module)
# print(link) # 测试上面的正则表达式是否正常运行
# 对经过正则表达式筛选后的数据进行赋值和添加
print("数据正在处理的路上,客官等等哈")
for items in imgUrl: # 遍历所有下载链接
ImgURl = items
if items != 0:
print("下载图片%d中" % n)
imgDownload(ImgURl, n) # 下载图片并标记下载的名称
n += 1
datalist2.append(ImgURl)
else:
datalist2.append('')
for item in titles:
datalistTitles.append(item)
for items in grasp:
datalist3.append(items)
# print(datalist3)是否正常运行
for item in link:
# print(item) # 测试是否能够正常输出连接的后半部分
# print(type(item)) # 测试输出的结果是否为str
url2 = "https://www.guancha.cn/"
url3 = url2 + item
# print(url3) # 测试是否能够得到正常的超链接
datalist4.append(url3) # 将得到的数据加入datalist4
# print(datalist4) 测试得到数据是否正常导入
# print(datalistTitles) # 测试新闻标题是否导入
return datalistTitles, datalist2, datalist3, datalist4
# 图片下载的处理
def imgDownload(imgUrl,n):
image_response = requests.get(imgUrl)
t = str(n).replace(".", "")
file_path = '{0}\\{1}.{2}'.format(r'D:\PythonProjects\project3\spider\img', t, '热点')
address = file_path
image = image_response.content
try:
with open(address + "新闻.jpg", "wb") as jpg:
jpg.write(image)
except IOError:
print("IO Error\n")
def saveDate(datalistTitles, datalist2, datalist3, datalist4):
# 3.保存数据
savepath = ".\\热点新闻.xls"
print("saving.....") # 显示数据正在处理中
book = xlwt.Workbook(encoding="utf-8") # 创建workbook工作对象
sheet = book.add_sheet('热点新闻获取', cell_overwrite_ok=True) # 创建工作表
col = ("新闻名字", "新闻图片URL", "新闻图片", "新闻概括", "新闻链接")
for i in range(0, len(col)):
sheet.write(0, i, col[i])
i = 1
j = 1
k = 1
m = 1
p = 1
for item in datalistTitles:
sheet.write(i, 0, item)
i += 1
for item in range(datalist2):
try:
address = "%d.热点新闻.jpg" % p
f = open(r'D:/PythonProjects/project3/spider/img/%s' % address, "r")
img = f.read()
sheet.write(p, 1, img)
f.close()
except Exception as e:
print(e)
for items in datalist2:
sheet.write(j, 2, items)
j += 1
for item in datalist3:
sheet.write(k, 3, item)
k += 1
for items in datalist4:
sheet.write(m, 4, items)
m += 1
book.save(savepath)
# 写入图片的函数定义
# def write_pic(cell, num):
# path =f'D:\PythonProjects\project3\spider\img\{num}.热点新闻.jpg'
#
if __name__ == '__main__':
datalist = []
(datalistTitles, datalist2, datalist3, datalist4) = main()
# for item in datalistTitles:
# datalist.append(item)
# for items in datalist2:
# datalist.append(items)
# for item in datalist3:
# datalist.append(item)
# for items in datalist4:
# datalist.append(items)
saveDate(datalistTitles, datalist2, datalist3, datalist4)
内容总结
以上是互联网集市为您收集整理的Python爬取新闻并生成Excel和下载有关图片的学习全部内容,希望文章能够帮你解决Python爬取新闻并生成Excel和下载有关图片的学习所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。