python 爬虫音乐;车票信息
·
音乐
#https://music.163.com/discover/toplist?id=3778678
#http://music.163.com/song/media/outer/url?id=26305541.mp3
import os
import requests
#导入解析包
from bs4 import BeautifulSoup
#创建beautifulsoup解析对象
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
# 3778678 热歌榜
def get_id(num):
if num.strip() == '':
music_list = '3778678'
else:
music_list = num
url = f'https://music.163.com/discover/toplist?id={music_list}'
res = requests.get(url,headers=headers).text
soup = BeautifulSoup(res, 'html.parser')
id = soup.find('ul',class_='f-hide').find_all('a')
num_list = []
i_list = []
for i in id:
num = i['href'].split('=')[1]
# num_list.append(num)
# i_list.append(i.text)
if len(num) > 1 :
url = f"http://music.163.com/song/media/outer/url?id={num}.mp3"
musci_url = requests.get(url,headers=headers).content
if not os.path.exists(f'music/{music_list}'):
os.mkdir(f'music/{music_list}')
print(f"目前正在下载: {i.text}")
with open(rf'music/{music_list}/' + i.text + '.mp3', 'wb') as f:
f.write(musci_url)
#return num_list,i_list
if __name__ == '__main__':
get_id(input("请输入歌单id (不输入默认为热歌榜单):"))
DrissionPage操作浏览器自动获取cookie
import time
import DrissionPage
from DrissionPage import ChromiumPage,ChromiumOptions
from DrissionPage.errors import ElementNotFoundError
#https://www.drissionpage.cn/browser_control/get_elements/syntax/#-class-%E5%8C%B9%E9%85%8D%E7%AC%A6-
#page.ele(".itemBox___DjR2j").click() class匹配
#xpath也好用直接在f12的Elements右键copy里面的xpath即可 语法ele('xpath:/html/body/div[3]/div/ul/li[3]').click()
#time.sleep(1)
#DrissionPage 4.0.5.6
# 创建ChromiumPage对象时会在指定端口启动浏览器,或接管该端口已有浏览器。
# 默认情况下,程序使用 9222 端口
def Cookie(url):
co = ChromiumOptions().headless(False)
page = ChromiumPage(co)
try:
time.sleep(3)
page.get(
url,
retry=99, show_errmsg=True, timeout=10)
cookie = page.cookies(as_dict=True)
return cookie,page
except ElementNotFoundError as e:
print('忽略', e)
cookie = page.cookies(as_dict=True)
return cookie
if __name__ == "__main__":
cookie = Cookie('https://kyfw.12306.cn/otn/leftTicket/queryG')
车票
import requests
from prettytable import PrettyTable
header = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
"referer": "https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc",
"Cookie": "_uab_collina=172526223226212764421464; JSESSIONID=07534181F9679204F8CF57257BA0E946; _jc_save_fromStation=%u6210%u90FD%2CCDW; _jc_save_wfdc_flag=dc; _jc_save_toStation=%u6C5F%u6CB9%2CJFW; route=6f50b51faa11b987e576cdb301e545c4; BIGipServerotn=2129133834.64545.0000; BIGipServerpassport=887619850.50215.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromDate=2024-09-23; _jc_save_toDate=2024-09-23"
}
#可以通过DrissionPage操作浏览器自动获取cookie
params={
'leftTicketDTO.train_date': '2024-09-30',
'leftTicketDTO.from_station': 'CDW',
'leftTicketDTO.to_station': 'JFW',
'purpose_codes': 'ADULT'
}
#https://kyfw.12306.cn/otn/leftTicket/queryG
url="https://kyfw.12306.cn/otn/leftTicket/queryG"
re=requests.get(url,headers=header,params=params)
pt = PrettyTable()
pt.field_names = [
"序号",
"车次",
"出发时间",
"到达时间",
"历时时间",
"一等座",
"二等座",
"硬卧",
"无座"
]
rej=re.json()['data']['result']
num=0
for i in rej:
index = i.split('|')
num += 1
train_num = index[3]
start_time = index[8]
end_time = index[9]
last_time = index[10]
one_seat = index[31]
two_seat = index[30]
no_swat = index[26]
# soft_sleeper = index[]
hard_sleeper = index[28]
# print(index)
dist = {
"序号": num,
"车次": train_num,
"出发时间": start_time,
"到达时间": end_time,
"历时时间": last_time,
"一等座": one_seat,
"二等座": two_seat,
"硬卧": hard_sleeper,
"无座": no_swat
}
pt.add_row([
num,
train_num,
start_time,
end_time,
last_time,
one_seat,
two_seat,
hard_sleeper,
no_swat
])
print(pt)
图片(借鉴别人的)
# -*- coding: UTF-8 -*-"""
import requests
import tqdm
def configs(search, page, number):
"""
:param search:
:param page:
:param number:
:return:
"""
url = 'https://image.baidu.com/search/acjson'
params = {
"tn": "resultjson_com",
"logid": "11555092689241190059",
"ipn": "rj",
"ct": "201326592",
"is": "",
"fp": "result",
"queryWord": search,
"cl": "2",
"lm": "-1",
"ie": "utf-8",
"oe": "utf-8",
"adpicid": "",
"st": "-1",
"z": "",
"ic": "0",
"hd": "",
"latest": "",
"copyright": "",
"word": search,
"s": "",
"se": "",
"tab": "",
"width": "",
"height": "",
"face": "0",
"istype": "2",
"qc": "",
"nc": "1",
"fr": "",
"expermode": "",
"force": "",
"pn": str(60 * page),
"rn": number,
"gsm": "1e",
"1617626956685": ""
}
return url, params
def loadpic(number, page):
"""
:param number:
:param page:
:return:
"""
while (True):
if number == 0:
break
url, params = configs(search, page, number)
result = requests.get(url, headers=header, params=params).json()
url_list = []
for data in result['data'][:-1]:
url_list.append(data['thumbURL'])
for i in range(len(url_list)):
getImg(url_list[i], 60 * page + i, path)
bar.update(1)
number -= 1
if number == 0:
break
page += 1
print("\nfinish!")
def getImg(url, idx, path):
"""
:param url:
:param idx:
:param path:
:return:
"""
img = requests.get(url, headers=header)
file = open(path + 'main_' + str(idx + 1) + '.jpg', 'wb')
file.write(img.content)
file.close()
if __name__ == '__main__':
search = input("请输入搜索内容:")
number = int(input("请输入需求数量:"))
path = 'D:\\photo/'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
bar = tqdm.tqdm(total=number)
page = 0
loadpic(number, page)
邮箱提醒
import smtplib
from email.header import Header # 用来对Email主题进行编码
from email.mime.text import MIMEText # 用来构造文本
from email.mime.image import MIMEImage # 用来构造图片
from email.mime.multipart import MIMEMultipart # 用来构造多个对象,如文本、图片、文件等
from email.mime.application import MIMEApplication # 多种附件类型使用
from email.utils import formataddr
def mail(subject, message):
# 创建邮件内容对象,参数对应内容、类型(plain文本、html超文本、邮件对象.attach(附件))、编码
msg = MIMEText(message, 'plain', 'utf-8')
# 邮件主题,将邮件标题转换成标准Email格式
msg['Subject'] = Header(subject, 'utf-8').encode()
# 发件人邮箱昵称、发件人邮箱账号
# msg['From'] = formataddr((Header('name', 'utf-8').encode(), "test@126.com"))
# 收件人邮箱昵称、收件人邮箱账号(多个Email地址,用逗号隔开)
# msg['To'] = formataddr((Header('name', 'utf-8').encode(), "test@126.com"))
# 抄送列表(多个Email地址,用逗号隔开)
# msg['Cc'] = formataddr((Header('name', 'utf-8').encode(), cc_addrs))
try:
# 通过SMTP_SSL登录SMTP服务器,创建SMTP邮件对象
server = smtplib.SMTP_SSL("smtp.126.com", 465)
# 使用授权码登录邮箱
server.login("test@126.com", "test")
# 发送邮件:as_string()会将整个Email内容转换为字符串,第二个参数可以以列表的方式写多个
server.sendmail("test@126.com", "test@126.com",msg.as_string())
# 关闭连接
server.quit()
print('发送成功!')
except Exception as e:
print(f'发送失败: {e}')
if __name__ == "__main__":
mail("主题","内容")
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)