首页
关于
留言板
友链
壁纸
Search
1
使用Git上传文件到GitHub
36 阅读
2
年纪轻轻,不学高数怎么行?
21 阅读
3
高等数学(同济版)电子书
20 阅读
4
Fiddler Everywhere的使用
20 阅读
5
Python多线程详解
19 阅读
Web前端
JavaScript
Python
Flask框架
爬虫项目
Selenium自动化
生活
其他
登录
Search
标签搜索
Python
python爬虫
Flask
技能
软件
生活
SEO
Git
Lollipop
累计撰写
35
篇文章
累计收到
7
条评论
首页
栏目
Web前端
JavaScript
Python
Flask框架
爬虫项目
Selenium自动化
生活
其他
页面
关于
留言板
友链
壁纸
搜索到
9
篇与
python爬虫
的结果
2022-11-14
爬取weibo句读APP的精选句子
简介简单的爬虫,抓取 weibo 句读APP的精选句子,没什么技术含量,主要是我想做个一言的api。开发工具Python 3.8Pycharm 2020 (社区版)推荐安装一个插件 JSON-handle , 干什么的呢? 在处理json数据时我们就不需要再去网页中找在线的json解析了,使用也很方便,直接在地址栏复制包含json数据的链接就好啦。😊实现思路肯定得先登录啦,之后定位到要爬取的主页(搜索句读后点击博主头像到主页)点击精选栏,打开开发者工具找到对应的json数据发起请求,处理请求,保存数据代码实现过程import requests # 获取json的数据 def get_json(link, cou): # 构造请求头 headers = { 'cookie': '粘贴自己的', 'referer': 'https://weibo.com/judourili?tabtype=home', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', 'x-requested-with': 'XMLHttpRequest', 'x-xsrf-token': '4yHbSeV9Db_MLDvoZ7xMAUZe' } response = requests.get(link, headers=headers).json() #传入一个计数的变量来控制循环次数,因为它第一页的json数据条数不统一 for page in range(cou): text_data = response['data']['list'][page]['text_raw'].replace('\n', '') with open('data.txt', mode='a', encoding='utf-8') as f: f.write(text_data + '\n') if __name__ == '__main__': # 虽然写的不美观,但思路很清晰吧, 哈哈😂 for i in range(1, 6): if i == 1: url = f'https://weibo.com/ajax/profile/myhot?page={i}&feature=2&uid=5795042732' count = 19 get_json(url, count) else: url = f'https://weibo.com/ajax/profile/myhot?page={i}&feature=2&uid=5795042732' count = 20 get_json(url, count) print('download------ok')执行结果
2022年11月14日
5 阅读
0 评论
0 点赞
2022-10-21
多线程采集壁纸-(嘎嘎快)
简介再原先的案例中进行了改写,加入多线程采集嘎嘎快开发工具环境使用Python 3.8 解释器Pycharm 编辑器所使用模块import reimport osimport requests >>> pip install requests如果安装python第三方模块:in + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车在pycharm中点击Terminal(终端) 输入安装命令实现思路发送请求 (这里都是get请求)模拟浏览器,构造请求头headers获取数据解析数据提取我们想要的内容(re匹配出需要的,建议直接再源码中复制需要的来进行匹配提前取)保存数据代码实现过程# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/21-16:00 # @File:new.py import requests # 用来发送请求模块<工具> import re # 提取数据工具 import os import threading # 加入多线程 """获取彼岸壁纸的4k游戏页""" # 获取页面 def get_page(page_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36', } response = requests.get(url=page_url, headers=headers) response.encoding = response.apparent_encoding return response # 解析页面获取需要的 def parse(html): html_info = re.findall(r'<li><a href="(.*?)".*?alt="(.*?)" /><b>', html.text) url_list = [] title_list = [] for link, title in html_info: # https://pic.netbian.com/tupian/29887.html link_url = 'https://pic.netbian.com' + link second_html = get_page(link_url) img_url = re.findall(r'id="img"><img src="(.*?)"', second_html.text)[0] real_url = 'https://pic.netbian.com' + img_url url_list.append(real_url) title_list.append(title) return url_list, title_list # 保存图片 def save(path, pic_content, title): with open(path + title + '.jpg', mode='wb') as f: f.write(pic_content) def download(url_link, title): url_data = get_page(url_link).content path = "downloads\\" if not os.path.exists(path): os.makedirs(path) save(path, url_data, title) print(url_link, title) if __name__ == '__main__': for page in range(1, 3): # 获取的页数 1-2 # 这是因为网站没有index_1这个页面 if page == 1: url = 'https://pic.netbian.com/4kyouxi/index.html' # 网站的链接 else: url = f'https://pic.netbian.com/4kyouxi/index_{page}.html' html_data = get_page(url) # parse(html_data) urls, titles = parse(html_data) threads = [] for i in range(len(urls)): t = threading.Thread(target=download, args=(urls[i], titles[i])) threads.append(t) for t in threads: # t.setDaemon(True) # 守护进程 t.start() 图片上传图床地址: 带你去看
2022年10月21日
14 阅读
0 评论
0 点赞
2022-10-12
年纪轻轻,不学高数怎么行?
介绍该程序是目标是获取 宋浩的高等数学的全部课程内容 由于视频数据较多,这里获取只有5集。有兴趣可以全部下载下来,但可能很耗时。开发环境:Python 3.8Pycharm 2020模块的使用:import requests import re import json import os.path import time # --> 爬多条数据时建议设置 import subprocess数据来源分析打开开发者工具,分析视频数据地址, 可以通过搜索 “cid”(122452656)的数据定位到视频的链接地址分析请求页面请求头,设置请求头信息,请求页面获取响应通过re提取出刚刚定位到的json数据的全部内容请求从json数据里取出的视频音频链接保存为二级制数据处理合并视频和音频,并保存指定文件夹中代码实现过程:# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/10-22:13 # @File:video_spider.py import requests import re import json import os.path import time import subprocess def get_page(peg_url): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', # 防盗链 针对403的解决,就是告诉浏览器是从哪里来 'referer': 'https://www.bilibili.com' } response = requests.get(url=peg_url, headers=headers) return response # 3 数据解析 def get_video_info(html_data): title = re.findall(r'"title":"(.*?)"', html_data)[0] video_info_html = re.findall(r'<script>window.__playinfo__=(.*?)</script>', html_data)[0] json_info_data = json.loads(video_info_html) audio_url = json_info_data['data']['dash']['audio'][0]['baseUrl'] video_url = json_info_data['data']['dash']['video'][0]['baseUrl'] # 视频和音频的链接 video_info = [audio_url, video_url] return video_info def get_detail(html_data, n): video_detail = re.findall(r'<script>window.__INITIAL_STATE__=(.*?);\(function\(\)\{var s;\(s=doc', html_data, re.S)[0] json_detail_data = json.loads(video_detail) # print(json_detail_data) page_detail = json_detail_data['videoData']['pages'][n-1]['page'] name_detail = json_detail_data['videoData']['pages'][n-1]['part'] name_detail = name_detail.replace(' ', '') new_title = title = re.sub(r'[\/:*?"<>|]', '', name_detail) # print(new_title) detail_list = [page_detail, name_detail] return detail_list def save(num, title, audio_url, video_url): audio_content = get_page(audio_url).content video_content = get_page(video_url).content folder_path = f'高等数学\\' if not os.path.exists(folder_path): os.makedirs(folder_path) with open(folder_path + title + '.mp3', mode='wb')as f: f.write(audio_content) with open(folder_path + title + '.mp4', mode='wb')as f: f.write(video_content) merge_video(title) def merge_video(video_name): # 合并后的位置是自己新建,运行前保证已存在 command = f'ffmpeg -i 高等数学\\{video_name}.mp4 -i 高等数学\\{video_name}.mp3 -c:v copy -c:a aac -strict experimental 合并后的位置\\{video_name}output.mp4' subprocess.run(command, shell=True) os.remove(f'高等数学\\{video_name}.mp4') os.remove(f'高等数学\\{video_name}.mp3') print(f'{video_name}合成完毕-----------') if __name__ == '__main__': for i in range(1, 6): url = f'https://www.bilibili.com/video/BV1Eb411u7Fw?p={i}' html = get_page(url) mp3_url, mp4_url = get_video_info(html.text) page, name = get_detail(html.text, i) # i 是 get_detail里用来获取数据的索引 save(page, name, mp3_url, mp4_url)运行结果:视频项目地址:{bilibili bvid="BV1Eb411u7Fw" page="1"/}下载的视频是正常播放的,这里截取一小段演示 {dplayer src="https://43.139.55.134/usr/uploads/2022/10/1714600980.mp4"/}
2022年10月12日
21 阅读
0 评论
0 点赞
2022-10-10
找工作难?让我们看看都需要具备什么
介绍爬取前程无忧的招聘信息,代码的实验过程中如果re解析报 “超出索引范围” 且索引是正确的,那就是你的响应数据可能出现问题(滑块验证什么的...)解决 --> 换浏览器来重新得到新的cookie,加随机的UA,加代理(这个可有可无),还可以可以清理cookie缓存开发环境:Python 3.8Pycharm 2020模块的使用:import requests import re import json import csv from fake_useragent import UserAgent import time import random数据来源分析网页开发者工具进行抓包分析…F12打开开发者工具, 刷新网页通过关键字进行搜索, 找到相应的数据, 查看response响应数据确定数据之后, 查看headers确定请求url地址 请求方式 以及 请求参数代码实现过程:发送请求, 用python代码模拟浏览器对于url地址发送请求获取数据, 获取服务器返回response响应数据解析数据, 提取我们想要招聘信息数据 (定位到需要的内容)保存数据, 保存到表格文件里面代码如下:# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/10-15:07 # @File:hehe.py import requests import re import json import csv from fake_useragent import UserAgent import time import random # 创建文件 f = open('python招聘信息.csv', mode='a', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '职位', '公司名', '薪资', '城市', '经验', '学历', '公司类型', '公司规模', '福利待遇', '发布日期', '公司详情页', '职位详情页', ]) # 写入表头 csv_writer.writeheader() for page in range(1, 11): print(f'----------------正在采集第{page}页数据内容----------------') time.sleep(random.randint(1, 2)) # 确定url地址 --> 可以直接复制 url = f'https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,{page}.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=' # 模拟浏览器 headers 请求头 伪装 headers = { 'Cookie': '_uab_collina=166538557219823735866747; guid=01b23e3a6e1902850f2b1e9fced72e0c; sajssdk_2015_cross_new_user=1; privacy=1665385557; nsearch=jobarea%3D%26%7C%26ord_field%3D%26%7C%26recentSearch0%3D%26%7C%26recentSearch1%3D%26%7C%26recentSearch2%3D%26%7C%26recentSearch3%3D%26%7C%26recentSearch4%3D%26%7C%26collapse_expansion%3D; search=jobarea%7E%60000000%7C%21ord_field%7E%600%7C%21recentSearch0%7E%60000000%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA0%A1%FB%A1%FApython%A1%FB%A1%FA2%A1%FB%A1%FA1%7C%21; acw_tc=ac11000116653904560264927e00de8957338c7d283a109de950de8563a9cf; acw_sc__v3=6343d77b9d499150173e59f34b8e275ea50c1dc4; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2201b23e3a6e1902850f2b1e9fced72e0c%22%2C%22first_id%22%3A%22183c101bc6f762-0abad1ff4c33f9-7b555471-1327104-183c101bc705c5%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTgzYzEwMWJjNmY3NjItMGFiYWQxZmY0YzMzZjktN2I1NTU0NzEtMTMyNzEwNC0xODNjMTAxYmM3MDVjNSIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjAxYjIzZTNhNmUxOTAyODUwZjJiMWU5ZmNlZDcyZTBjIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2201b23e3a6e1902850f2b1e9fced72e0c%22%7D%2C%22%24device_id%22%3A%22183c101bc6f762-0abad1ff4c33f9-7b555471-1327104-183c101bc705c5%22%7D; ssxmod_itna=Qq+xyDcGG=D=GQDCYDX8aR8hKGCD0nGngaZnhirD05r3GzDAxn40iDtr=yeZrZlgx+NrQj8BDaCFj3+wF=D63rwasj/w4GLDmKDyKlGbe3D4SKGwD0eG+DD4DW3qAoDexGPynLMKGWD4qDRDAQDzudBDGfgDYPyD0fxxBjVCd4yiqDg/qDB+hdDKqGgCLtURCiixGUxfwD4CqDMePGXiG9NCwu8XZwlfLcHOCPn3jioxG6x1qGml4WDCoUZ7lvfzAx3lr43iAp4+AwK/7D5A7G0KOGibB5b87hzF0GtWEkMVDDAYBw3YMxxD; ssxmod_itna2=Qq+xyDcGG=D=GQDCYDX8aR8hKGCD0nGngaZnhDnFS0uDDsdrNDLQCruZrlbQlOTe=5Hinkx=D6GAIXz1WRh9wNXtEnDbfZYAl5=4lGIlrutZQAjx0QX8Am0k4KsvmDkqFaKxj28opdXUb8D0FBp4oqjlbj0qzxxcDd+HbdomIdIZFlP/b4f9KMtt6enqrSbtLwX9iPulfdiyW4uq6QR55d65vd3qhQRmBLpzfLLqsDcIzDrA0u6Um6hy0Z0xi8ylzB61rKYFPjiQECWTMh6vh+cq5pa3gL8Y6hu4kR80/aUoMhK9tnUF7wjDIEcGHDe4=PIOv=ZYPOvImvpAefldhr2HZ+dbY5ZXG1qtZ0KWd=tYClA7hd3PjTI5d=GB=A5GdotAzcIezr53ush0Unxo/v4rE59P4j0RDvtFRGp=IbLiSqj72zp35SEB=2oS0KPReovVpY8f27gaA+uGp2WET+33VErdPIiKHwS2Kbnac5=/cZ2iDcTX0ExPXVDF/ZHzoo4CI4T0qd=PwQsZY2ffoXGWDG2t0ntHtKDLFu+SjCgiAOT7lC7Qi8Cr5XKHDux8ZD3eYWZQOTqGbq/rjN34n6StuH+TY44WnGYBrxYB2XrRHDDFqD+apN0xFdD=', # User-Agent 用户代理, 表示浏览器基本身份标识 'User-Agent': UserAgent().random } # 设置代理 proxies = { 'http': 'http://222.22.22.12:6666', } """注意,有时候返回的200也不一定会是想要的数据内容,那就是被反爬了呗。反爬手段很多,解决方法也不少,打铁还得自身硬。""" # 发送请求 使用什么请求方式, 取决于开发者工具里的内容 response = requests.get(url=url, headers=headers, proxies=proxies) response.encoding = response.apparent_encoding # <Response [200]> 响应对象 200 状态码 请求成功 print(response) # 获取数据, 获取服务器返回响应数据---> 获取文本数据 print(response.text) """ 解析数据 ---> 提取我们想要数据内容 解析方法比较多: re css xpath json解析.... 如何选择方法 根据返回数据类型以及我想要数据内容情况 re.findall() 调用re模块里面findall方法 通过re模块找到所有我们想要数据内容 ---> 告诉它去哪里找, 找什么样数据 正则匹配提取出来数据, 返回列表 ---> """ # 提取招聘数据 re.findall() html_data = re.findall(r'window.__SEARCH_RESULT__ =(.*?)</script>', response.text, re.S)[0] # 把字符串数据转成json字典数据 json_data = json.loads(html_data) # 字典取值 ---> 根据键值对取值 根据冒号左边的内容[键], 提取冒号右边的内容[值] # for循环遍历 把列表里面数据一个一个提取出来 for index in json_data['engine_jds']: dit = { '职位': index['job_name'], '公司名': index['company_name'], '薪资': index['providesalary_text'], '城市': index['workarea_text'], '经验': index['attribute_text'][1], '学历': index['attribute_text'][-1], '公司类型': index['companytype_text'], '公司规模': index['companysize_text'], '福利待遇': index['jobwelf'], '发布日期': index['issuedate'], '公司详情页': index['company_href'], '职位详情页': index['job_href'], } # 写入数据 csv_writer.writerow(dit) print(f'完成{page}页的抓取')运行结果:
2022年10月10日
14 阅读
0 评论
0 点赞
2022-10-09
一个非常优质的个人博客文章爬取 -- 安志合
介绍;逛GitHub时发现的一个博客,网站文章数量很多,内容也很友好.python学习基础到进阶都有,案例都是通俗易懂的.环境使用:Python 3.8Pycharm模块使用:import requests from fake_useragent import UserAgent import os.path from lxml import etree import re实现思路:定位想要获取的内容页面,F12 打开开发者工具,判断要请求的下一页的链接地址规律确认要爬取的信息页面后,requests发送请求,获取响应结果这里我用xpath来提取文章内容的链接和标题信息再次请求,获取响应解析响应内容,因为是获取文章内容html的数据,这里我换re了,比较方便些自定义一个html的<!DOCTYPE>骨架页面,可以外部定义一个文件再引用 通过format传递html的数据保存文件到指定文件夹就好了代码如下:# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/9-8:43 # @File:spider.py import requests from fake_useragent import UserAgent import os.path from lxml import etree import re for page in range(1, 3): # 获取的页数 1-2 url = f'https://chegva.com/tag/python/page/{page}/' headers = { 'User-Agent': UserAgent().random, } requests.packages.urllib3.disable_warnings() response = requests.get(url=url, headers=headers, verify=False) response.encoding = response.apparent_encoding html = response.text #初始化etree对象 dom_tree = etree.HTML(html) # 定位文章的内容(同提取 li元素一样) articles = dom_tree.xpath('//*[@id="content"]/article') # print(articles) for contents in articles: links = contents.xpath('./header/h2/a/@href')[0] titles = contents.xpath('./header/h2/a/text()')[0] # 因为 xpath 解析出是以列表返回,通过取下标来转为字符串 # print(titles, links) # 请求获取到的文章页的链接 detail_page = requests.get(links, headers=headers).text # 通过re提取需要的html数据 info_data = re.findall(r'</a></span></header>(.*?)<div class="open-message"', detail_page, re.S)[0] info_html = info_data.replace(' ', '') # 自己新建一个文件 import html html_data = html.html_info.format(title=titles, article=info_data) # 创建文件夹来保存 folder_name = 'python基础' html_data_path = f'{folder_name}\\' if not os.path.exists(html_data_path): os.mkdir(html_data_path) with open(html_data_path + titles + '.html', mode='w', encoding='utf-8')as f: f.write(html_data) print(f'保存完毕******{titles}******')这是自定义的 htmlhtml_info = """<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{title}</title> </head> <body> {article} </body> </html> """运行结果:
2022年10月09日
12 阅读
0 评论
0 点赞
2022-10-08
爬取COSPLAY美图,阿巴阿巴 ~~
介绍浅浅欣赏一下吧,质量还是不错滴开发环境:Python 3.8Pycharm模块使用:# 导入数据请求模块 --> 第三方模块 需要需要自行安装 pip install requests import requests # 导入数据解析模块 --> 第三方模块 需要自行安装 pip install parsel import parsel # 导入UA的库 --> 第三方模块 需要自行安装 pip install fake_useragent from fake_useragent import UserAgent # 导入正则模块 --> 内置模块 import re # 导入文件操作模块 --> 内置模块 import os.path实现基本思路:找到图集详细页面,打开开发者工具 F12 再Element中分析到图片的详情页链接请求图集页面,获取到响应数据解析出刚刚分析的图片详情页的链接地址发送请求,获取图片详情页响应数据解析出图片详情页中的图片链接和标题信息请求图片链接,以二级制格式保存.jpg到指定文件夹中代码如下:# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/8-9:09 # @File:cos.py # 导入数据请求模块 --> 第三方模块 需要需要自行安装 pip install requests import requests # 导入数据解析模块 --> 第三方模块 需要自行安装 pip install parsel import parsel # 导入UA的库 --> 第三方模块 需要自行安装 pip install fake_useragent from fake_useragent import UserAgent # 导入正则模块 --> 内置模块 import re # 导入文件操作模块 --> 内置模块 import os.path for i in range(1, 6): #1-5页 print(f'++++++------正在下载{i}页------++++++') url = f'http://ciyuandao.com/photo/list/0-0-{i}' headers = { # 浏览器基本身份信息 'User-Agent': UserAgent().random } response = requests.get(url=url, headers=headers, verify=False) # <Response [200]> 表示请求成功了 响应对象 verify=False 忽略证书验证的,看到报ssl就可以设置它 print(response) # 初始化Selector selector = parsel.Selector(response.text) # 获取图集详情页的地址 href = selector.css('.pics ul li .tits::attr(href)').getall() for index in href: # 'http://ciyuandao.com/photo/show/134563' pic_url = 'http://ciyuandao.com' + index # 拼接字符 -- 图集详情页完全的链接 index_data = requests.get(url=pic_url, headers=headers).text index_selector = parsel.Selector(index_data) # 获取图集详情页里的图片链接 img_url_list = index_selector.css('.talk_pic img::attr(src)').getall() # 获取图片标题 title = index_selector.css('.border_bottom::text').get() # 保存时避免出现文件不允许的命名符号 new_title = title = re.sub(r'[\/:*?"<>|]', '', title) # 计数器 num = 1 # 自动创建文件夹 file = f'img\\{new_title}\\' # 判断如果没有这个文件夹 if not os.path.exists(file): # 自动创建文件夹 os.makedirs(file) # for循环遍历 提取列表里的图片链接 for img_url in img_url_list: # 获取图片二进制数据 img_content = requests.get(url=img_url, headers=headers).content # 保存图片 with open(file + new_title + str(num) + '.jpg', mode='wb') as f: # 写入数据 f.write(img_content) # 每次循环 +1 num += 1 print('下载完毕******'+title, pic_url)美图欣赏:
2022年10月08日
16 阅读
0 评论
0 点赞
2022-10-07
多线程--采集王者荣耀的英雄皮肤高清大图
介绍:采集王者荣耀的英雄皮肤高清大图,保存下来做壁纸,做屏保,做api接口都是不错滴。环境使用:Python 3.8Pycharm翻译插件 translation模块使用:# 导入数据请求模块 ---> 第三方模块 需要 在cmd里面进行安装 pip install requests import requests # 导入正则模块 ---> 内置模块 不需要安装 import re # 导入文件操作模块 ---> 内置模块 不需要安装 import os import json import threading # 导入多线程模块如果安装python第三方模块:win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车2.在pycharm中点击Terminal(终端) 输入安装命令如何配置pycharm里面的python解释器?选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)点击齿轮, 选择add添加python安装路径议安装虚拟环境的第三方库 virtualenv 来管理虚拟环境实现流程思路:对要采集的页面发送请求 分析得到的响应 -> F12 <查看请求头的信息>获取数据, 获取response响应数据(text\json\content...)解析数据, 提取我们想要数据内容 —> 通过re定位需要的数据保存数据, 到指定创建好的文件夹多页采集, for循环轻松搞定代码# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/6-23:07 # @File:wzSpider.py # 导入数据请求模块 ---> 第三方模块 需要 在cmd里面进行安装 pip install requests import requests # 导入正则模块 ---> 内置模块 不需要安装 import re # 导入文件操作模块 ---> 内置模块 不需要安装 import os import json import threading # 导入多线程模块 def get_json_data(): link = 'https://pvp.qq.com/web201605/js/herolist.json' # 模拟伪装浏览器 ---> 请求头 headers = { # user-agent 用户代理 表示浏览器基本身份标识 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } # 发送请求 json_data = requests.get(url=link, headers=headers).json() # for循环遍历 hero_id_list = [] hero_name_list = [] for index in json_data: # 字典键值对取值 根据冒号左边的内容[键],提取冒号右边的内容[值] hero_id = index['ename'] hero_name = index['cname'] # 保存到列表里,好返回使用 hero_id_list.append(hero_id) hero_name_list.append(hero_name) return hero_name_list, hero_id_list # 创建文件保存路径 def folder_path(name): # 设定文件夹路径 相对路径 file = f'wzimgs\\{name}\\' if not os.path.exists(file): os.makedirs(file) return file # 下载图片 def download(hero_name, hero_id): url = f'https://pvp.qq.com/web201605/herodetail/{hero_id}.shtml' # 模拟伪装浏览器 ---> 请求头 headers = { # user-agent 用户代理 表示浏览器基本身份标识 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } # 发送请求 ---> <Response [200]> 响应对象: <>表示对象 response 响应回复 200 状态码 表示请求成功 response = requests.get(url=url, headers=headers) # 乱码了 怎么办? ---> 你要根据网页编码来 response.encoding = 'gbk' # 自动识别编码(网站备用的编码) response.encoding = response.apparent_encoding # 获取数据, 获取服务器返回响应数据 文本数据 print(response.text) title_list = re.findall(r'data-imgname="(.*?)">', response.text)[0] # 鹿灵守心&0|森&0|遇见神鹿&71|时之祈愿&94|时之愿境&42 title_list = re.sub(r'&\d+', r'', title_list).split('|') # print(title_list) # for循环 for num in range(1, 6): len() 统计列表元素个数 for num in range(1, len(title_list) + 1): # 列表取值, 根据索引位置,索引位置从0开始计数 img_name = title_list[num - 1] # 构建图片url地址 # 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/105/105-bigskin-1.jpg' img_url = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{hero_id}/{hero_id}-bigskin-{num}.jpg' # print(img_name, img_url) # 保存数据 ---> 发送请求 获取数据 二进制数据 time.sleep(1) img_content = requests.get(url=img_url, headers=headers).content with open(folder_path(hero_name) + img_name + '.jpg', mode='wb') as f: f.write(img_content) print(f'保存完毕------{hero_name}') if __name__ == '__main__': start = time.time() hero_names, hero_ids = get_json_data() threads = [] for i in range(len(hero_names)): t = threading.Thread(target=download, args=(hero_names[i], hero_ids[i])) threads.append(t) for t in threads: t.start()效果图:
2022年10月07日
13 阅读
0 评论
0 点赞
2022-10-07
采集CSDN上关于python基础的文章
介绍:主要采集CSDN的文章,也是以学习为主。环境使用:Python 3.8Pycharm翻译插件 translation模块使用:requests >>> pip install requestsfrom fake_useragent import UserAgent -- UA的库from lxml import etree -- XPath解析用的import timeimport osimport re如果安装python第三方模块:win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车在pycharm中点击Terminal(终端) 输入安装命令如何配置pycharm里面的python解释器?选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)点击齿轮, 选择add添加python安装路径建议安装虚拟环境的第三方库 virtualenv 来管理虚拟环境实现流程思路:对要采集的页面发送请求 分析得到的响应 -> F12 <查看请求头的信息>获取数据, 获取response响应数据解析数据, 提取我们想要数据内容 —> 通过re定位需要的数据保存数据, 到指定创建好的文件夹多页采集, for循环轻松搞定代码:# -*- coding:utf-8 -*- # @Author:🎈RedBalloon # @Time:2022/10/4-14:56 # @File:csdnSpider.py import requests from fake_useragent import UserAgent from lxml import etree import time import os import re # 获取页面的html信息 def get_page(page_url): headers = { 'user-agent': UserAgent().random, } try: response = requests.get(url=page_url, headers=headers) response.raise_for_status() if response.status_code == 200: return response except: print('不对!有问题') def parse(html_data): tree = etree.HTML(html_data) lis = tree.xpath('//*[@id="column"]/ul/li') for li in lis: links = li.xpath('./a/@href')[0] # './a/div[1]/h2 || //*[@id="column"]/ul/li/a/div[1]/h2' titles = li.xpath('./a/div[1]/h2/text()')[0].strip() # print(titles, links) # 测试 # 如果后续保存文件时文件名出现windows不允许的字符时可以这样做,出现这些字符文件会保存不了 titles = re.sub(r'[/\*"<>|:]', '', titles) time.sleep(1) response_info_page = get_page(links) info_html = response_info_page.text content_html = re.findall(r'<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-6e43165c0a.css">(.*?)<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-22a2fefd3b.css" rel="stylesheet">', info_html, re.S)[0] # 替换掉空格,方便后续自动化上传到网站(这样不会样式混乱) content_html = content_html.replace(' ', '') save(titles, content_html) def save(title_info, content_html_data): import html # 一个html的<!DOCTYPE html>生成骨架,自己修改,通过format方法传入获取的html数据 html_data = html.html_header.format(title=title_info, article=content_html_data) # 文件保存路径 folder_name = 'Python零基础入门篇' html_data_path = f'{folder_name}\\' if not os.path.exists(html_data_path): os.mkdir(html_data_path) with open(html_data_path + title_info + '.html', mode='w', encoding='utf-8')as f: f.write(html_data) print(f'正在保存======{title_info}') def main(): url = 'https://blog.csdn.net/oh_python/category_11620063.html' # 第二页数据,需要可以做个循环 # 'https://blog.csdn.net/oh_python/category_11620063_1.html' # 'https://blog.csdn.net/oh_python/category_11620063_2.html' html = get_page(url) parse(html.text) if __name__ == '__main__': main()
2022年10月07日
9 阅读
0 评论
0 点赞
2022-10-06
国庆假期无聊的我给大家采集些4K游戏壁纸~
话不多说,直接上操作环境使用Python 3.8 解释器Pycharm 编辑器所使用模块import reimport osimport requests >>> pip install requests如果安装python第三方模块:in + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车在pycharm中点击Terminal(终端) 输入安装命令基本思路流程:发送请求 (这里都是get请求)模拟浏览器,构造请求头headers获取数据解析数据提取我们想要的内容(re匹配出需要的,建议直接再源码中复制需要的来进行匹配提前取)保存数据import requests # 用来发送请求模块<工具> import re # 提取数据工具 import os # 操作系统文件的 """获取彼岸壁纸的4k游戏页""" # 保存路径 def save_path(): path = "imgs\\" if not os.path.exists(path): os.mkdir(path) return path # 获取页面 def get_page(page_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36', } response = requests.get(url=page_url, headers=headers) response.encoding = response.apparent_encoding html = response return html # 解析页面获取需要的 def parse(html): html_info = re.findall(r'<li><a href="(.*?)".*?alt="(.*?)" /><b>', html.text) for link, title in html_info: # https://pic.netbian.com/tupian/29887.html link_url = 'https://pic.netbian.com' + link second_html = get_page(link_url) img_url = re.findall(r'id="img"><img src="(.*?)"', second_html.text)[0] real_url = 'https://pic.netbian.com' + img_url pic_data = get_page(real_url) print(real_url, title) pic_content = pic_data.content path = save_path() save(path, pic_content, title) # 保存图片 def save(path, pic_content, title): with open(path + title + '.jpg', mode='wb') as f: f.write(pic_content) if __name__ == '__main__': for page in range(1, 3): # 获取的页数 1-2 # 这是因为网站没有index_1这个页面 if page == 1: url = 'https://pic.netbian.com/4kyouxi/index.html' # 网站的链接 else: url = f'https://pic.netbian.com/4kyouxi/index_{page}.html' html_data = get_page(url) parse(html_data) 图片上传图床地址: 带你去看
2022年10月06日
12 阅读
0 评论
0 点赞