某讯新闻图片爬取
需求:
1.图片爬取以及内容 2.新建《腾讯新闻》文件夹 3.爬取该页面的图片 4.并将图片alt的内容写在图片名称上 魏大勋回应求婚秦岚被拒:爆料是对我父母的恶意揣测,希望口下留情.png
编码思路 :
-
设置目标网页的url地址。
-
设置用户代理,模拟浏览器进行访问。
-
获取网页数据,通过requests库向目标url发送请求,并将响应的数据以utf-8编码格式解码,以获取html文档数据。
-
进行网页数据解析处理,使用BeautifulSoup库将获取到的html数据进行解析处理,提取需要的图片链接和标题信息。
-
处理图片链接,通过遍历获取到的图片链接列表,循环调用getImgData()函数对每个图片链接进行处理。
-
保存图片,使用urllib库的urlopen()函数请求图片链接,获取图片数据,并将其写入本地文件,以实现图片的保存。
-
输出结果,显示图片已经被保存的编号。
实现代码:
import os
import requests
from bs4 import BeautifulSoup
import urllib.request as req
# 1.设置url请求
url = "https://new.qq.com/rain/a/20230504A044FT00"
# 2.设置用户代理
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
}
# 3.获取网页数据
def getHtml():
# 3.1 打开网页爬取网页数据
response = requests.get(url=url,headers=headers)
# 3.2 设置解码
response.encoding = 'utf-8'
# 3.3 获取网页数据
html = response.text
# 3.4 进行搜索处理
soup = BeautifulSoup(html,'lxml')
# 3.5 图片的链接处理
# https://inews.gtimg.com/news_bt/OqROeL1vdp-Vgt504KdNG2eLGp19jKBBBmEgJ8TY-GyB8AA/1000
# //inews.gtimg.com/news_bt/OqROeL1vdp-Vgt504KdNG2eLGp19jKBBBmEgJ8TY-GyB8AA/1000
content = soup.select("img[class='content-picture']")
# 3.6 获取标题
title = soup.select("h1")[0].get_text()
# 3.7 循环遍历
for tp in content:
getImgData(tp['src'],title)
'''4.保存图片'''
index = 1
def getImgData(imgUrl,title):
global index
# 4.1 爬取图片
img = req.urlopen(url="https:"+imgUrl).read()
# 4.2 将图片保存起来
fileImg = open("%s%02d.png"%(title,index),'wb')
fileImg.write(img)
fileImg.close()
# 4.3 输出
print("已经写入了%d"%index)
index+= 1
if __name__ == '__main__':
if "腾讯新闻" not in os.listdir():
os.mkdir("腾讯新闻")
os.chdir("腾讯新闻")
getHtml()
双色球数据统计与分析
需求:
https://datachart.500.com/ssq/?expect=100 1.爬取彩票网的100期数据信息 2.分布存储 期号,红色球-6,蓝色球-1 3.将存储的信息为进行分析 3.1 红色球 100期中 出现频率最高的数据信息 排序 3.2 蓝色球 100期中 出现频率最高的数据信息 排序 3.3 将红色球前10和蓝色球前10 进行随机分配 3.4 最终出现的结果为 5个双色球 票号 3,8,19,20,22,32 5 3,8,19,20,22,32 5 3,8,19,20,22,32 5 3,8,19,20,22,32 5 3,8,19,20,22,32 5 注意事项: 1.解码格式设置为gb2312 2.数据的排序以及存储 2.1 存储 红色球 二维列表 2.2 排序
编码思路 :
-
首先导入必要的库:requests、os、random、pymysql和从bs4包中导入的BeautifulSoup。
-
网站的URL设置。
-
设置一个用户代理在HTTP请求头中使用。
-
定义几个全局变量:qhList、redList和blueList用于存储彩票数据;redDict和blueDict用于分别存储红球和蓝球的频率计数;red10和blue10用于存储最频繁的前10个红球和蓝球;redListTwo用于以二维列表的形式存储红球。
-
定义getCP()函数,该函数向URL发出GET请求并使用BeautifulSoup从HTML响应中提取彩票数据。然后它调用getCountData()函数对数据进行分析。
-
定义getCountData()函数,该函数计算红球和蓝球的频率计数,并将最频繁的前10个红球和蓝球分别存储在red10和blue10中。然后调用getSaveData()函数将数据保存到文件中。
-
定义getSaveData()函数,该函数将红球和蓝球存储在一个二维列表中,然后将彩票数据(包括二维列表)写入文本文件。然后它调用getFaCai()函数对数据进行进一步分析。
-
定义getFaCai()函数,该函数使用彩票数据进行一些分析,并将结果存储在一个列表faList中。
实现代码:
import requests,os,random,pymysql
from bs4 import BeautifulSoup
# 1.设置url
url = "https://datachart.500.com/ssq/?expect=100"
# 2.设置用户代理
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}
# 3.设置全局变量
qhList = []
redList = []
blueList = []
# 统计红色球和蓝色球频率值
# '12':20
redDict = {}
blueDict = {}
# 存储红色球前10个值
red10 = []
# 存储蓝色球前10个值
blue10 = []
# 红色球二维列表
redListTwo = []
# 4.获取彩票网数据页面
def getCP():
# 4.1 获取网页对象
response = requests.get(url=url,headers=headers)
# 4.2 设置解码文件
response.encoding = 'gb2312'
# 4.3 获取bs4对象
soup = BeautifulSoup(response.text,'lxml')
# 4.4 获取100期的期号
qh = soup.select("tbody[id='tdata'] td[align='center']")
# 4.5 循环遍历qh获取td标签中的本文内容
for qhStr in qh:
qhList.append(int(qhStr.get_text()))
# 4.6 红色小球(100期的所有小球号600个)
red = soup.select("td[class='chartBall01']")
for redStr in red:
redList.append(int(redStr.get_text()))
# 4.7 蓝色球
blue = soup.select("td[class='chartBall02']")
for blueStr in blue:
blueList.append(int(blueStr.get_text()))
# 4.8 数据处理分析
getCountData()
# 5.统计频率最高的10个数
def getCountData():
# 5.1 将红色小球以及频率值存储到redDict
for i in range(1,34):
# i 下标1-33
# i = 1
# {1:15,2:30,3:40...}
redDict[i] = redList.count(i)
# 5.2 将redDict进行频率值排序
for kt in sorted(redDict.items(),
key=lambda kv:(kv[1],kv[0]),
reverse=True):
# kt[0] ===>1,2,3,4,...3
# kv[1] ===>频率值
# kv[0] ===>小球号
red10.append(kt[0])
# 5.3 截取前十个数据
del red10[10:]
print('前10个红色小球:',red10)
# 5.4 蓝色小球
for i in range(1,17):
blueDict[i] = blueList.count(i)
# 5.5 循环遍历排序
for kt in sorted(blueDict.items(),key=lambda kv:(kv[1],kv[0]),
reverse=True):
blue10.append(kt[0])
# 5.6 截取前十个蓝色小球
del blue10[10:]
print("前10个蓝色小球:",blue10)
# 5.7 调用保存数据
getSaveData()
# 6.保存数据
def getSaveData():
# 6.1 将红色球进行二维列表设置
lt = [0 for i in range(0,6)]
# 6.2 将原始的数据存储到txt或者数据库中
for ix in range(0,len(redList)):
lt[ix%6] = int(redList[ix])
if ix%6 == 5:
# 二维列表
# [[4,1,23,20,23,22],[...]]
redListTwo.append(lt)
lt = [0 for i in range(0,6)]
# 6.3 设置空字符串
data = ""
# 6.4 循环遍历将数据设置并写入
# 22101:3,5,8,18,22,27:10
for i in range(0, len(qhList)):
line = "%d:%s:%d\n" \
% (qhList[i], ",".join('%s' % num for num in redListTwo[i]), blueList[i])
data += line
# 6.5 设置到文本中
file = open("cai.txt",'w')
file.write(data)
file.close()
getFaCai()
# 7.分析得到数据
def getFaCai():
# 7.1 设置空列表
faList = []
# 7.2 循环遍历
for ix in range(0,5):
faList.append([0 for i in range(0,7)])
# 7.3 前5个红色小球
for i in range(0,5):
for j in range(0,7):
# 红色小球
if j != 6:
rx = random.randint(0,9)
faList[i][j] = red10[rx]
else:
bx = random.randint(0,9)
faList[i][j] = blue10[bx]
# 7.4 输出需要购买的彩票数字
print("购买的彩票:",faList)
# 7.5 将数据存储到数据库中
getSaveMySQL()
# 8.存储到数据库中
def getSaveMySQL():
# 8.1 建立数据库通道
conn = pymysql.connect(
host="127.0.0.1",
user='root',
password='123456'
)
# 8.2 设置数据库名
conn.select_db("caipiao")
# 8.3 获取游标
cur = conn.cursor()
# 8.4 设置循环遍历数据
for i in range(0,len(qhList)):
qh = qhList[i]
blue = blueList[i]
red = redListTwo[i]
sql = "insert into fa(`id`,`qh`,`red1`,`red2`,`red3`,`red4`,`red5`,`red6`,`blue`) values(null,%d,%d,%d,%d,%d,%d,%d,%d)" % (
qh, red[0], red[1], red[2], red[3], red[4], red[5], blue)
print(sql)
cur.execute(sql)
# 8.5 关闭游标以及通道
cur.close()
conn.commit()
conn.close()
if __name__ == '__main__':
getCP()