小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)

jS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了

一、注意:代码加入了常规的防爬技术

       如果不加,如果网站有防爬技术,比如频繁访问,后面你会发现什么数据都取不到

1.1 模拟请求头:  这里入进入一步加强,随机,主要是User-Agent这个参数

User-Agent获取地方:

1.2 伪造请求cookie:当然也这里可以做随机的

 网页获取位置:

 1.3 使用代理IP(我这里没有做这个,这个网站没必要,也没深入研究)

使用代理IP解决反爬。(免费代理不靠谱,最好使用付费的。有按次数收费的,有按时长收费的,根据自身情况选择)
是什么意思呢,就是每次发送请求,让你像从不同的地域发过来的一样,第一次我的ip地址是河北,第二次是广东,第三次是美国。。。像这样:

def get_ip_pool(cnt):"""获取代理ip的函数"""url_api = '获取代理IP的API地址'try:r = requests.get(url_api)res_text = r.textres_status = r.status_codeprint('获取代理ip状态码:', res_status)print('返回内容是:', res_text)res_json = json.loads(res_text)ip_pool = random.choice(res_json['RESULT'])ip = ip_pool['ip']port = ip_pool['port']ret = str(ip) + ':' + str(port)print('获取代理ip成功 -> ', ret)return retexcept Exception as e:print('get_ip_pool except:', str(e))
proxies = get_ip_pool() # 调用获取代理ip的函数
requests.get(url=url, headers=headers, proxies={'HTTPS': proxies}) # 发送请求

1.4 随机等待间隔访问

尽量不要用sleep(1)、sleep(3)这种整数时间的等待,一看就是机器。。
还是那句话,让爬虫程序表现地更像一个人!

time.sleep(random.uniform(0.5, 3))  # 随机等待0.5-3秒

上面4点防爬技术,不一定要全部加入,只看被爬网站是否有防爬技术,多数用到1、2点就搞定

一、例子:以抓取双色球数据为例子

官网:阳光开奖

 经过排查,是通过接口获取数据再由JS来生成这部分网页元素

通过检查元素是有数据的(JS来生成这部分网页元素)

一、不过滤什么元素字段,把所有元素导出表格

# 抓取双色球历史数据
# 编码:utf-8
import requests
import json
import random
import time
import pandas as pddata_list = []
num_pages = 1 #抓取多少页数据# 创建一个DataFrame,用于保存到excel中for page in range(1, num_pages+1):url = 'http://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&issueCount=&issueStart=&issueEnd=&dayStart=&dayEnd=&pageSize=30&week=&systemType=PC&pageNo='url2 = url + str(page)# request header,其中最关键的一项,User-Agent,可以写个agent_list,每次请求,随机选择一个agent,像这样:agent_list = ["Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5","Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7","Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"]headers = {'User-Agent': random.choice(agent_list),  # 在调用的时候,随机选取一个就可以了# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299','Referer': 'http://www.cwl.gov.cn/ygkj/wqkjgg/ssq/','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1','Cookie': 'HMF_CI=xxxxxxxxxxxxxxxxxxxxxxxxx'  # 加入自己的Cookie}# 使用代理IP# proxies = {#     'http': 'http://10.10.1.10:3128',#     'https': 'http://10.10.1.10:1080',# }#response = requests.get(url2, headers=headers, proxies=proxies).textwbdata = requests.get(url2, headers=headers).texttime.sleep(random.uniform(0.5, 3))  # 随机等待0.5-3秒data = json.loads(wbdata)  # json.loads() 方法将 JSON 数组转换为 Python 列表news = data['result']for n in news:df = pd.DataFrame(n)df.to_excel("双色球历史数据.xlsx")
print('完成')

导出excel

二、只要需要的元素字段,这里比如只需要期号、红球、蓝球("code", "red", "blue")三个数据

# 抓取双色球历史数据
# 编码:utf-8
import requests
import json
import random
import time
import pandas as pddata_list = []
# 抓取多少页数据
pageNo = 1
# 页数
pageSize = 30# 只需要期号、红球、蓝球("code", "red", "blue")三个数据
columns = ["code", "red", "blue"]
df = pd.DataFrame(columns=columns)for page in range(1, pageNo+1):url = 'http://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&issueCount=&issueStart=&issueEnd=&dayStart=&dayEnd=&pageSize=' + \str(pageSize) + '&week=&systemType=PC&pageNo='url2 = url + str(page)# request header,其中最关键的一项,User-Agent,可以写个agent_list,每次请求,随机选择一个agent,像这样:agent_list = ["Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5","Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7","Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"]headers = {'User-Agent': random.choice(agent_list),  # 在调用的时候,随机选取一个就可以了# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299','Referer': 'http://www.cwl.gov.cn/ygkj/wqkjgg/ssq/','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1','Cookie': 'HMF_CI=xxxxxxxxxx'  # 加入自己的Cookie}# 使用代理IPwbdata = requests.get(url2, headers=headers).text# 随机等待间隔访问 随机等待0.5-3秒time.sleep(random.uniform(0.5, 3))data = json.loads(wbdata)news = data['result']# 过滤不要的元素数据new_json = json.dumps([{key: x[key] for key in columns} for x in news])# 再将JSON 数组转换为 Python 列表listnew_response = json.loads(new_json)for n, arr in enumerate(new_response):index = n+(pageNo-1)*pageSize  # 插入新数据时要添加索引df.loc[index] = arr  # 一次插入一行数据df.to_excel("双色球历史数据2.xlsx")
print('完成')

上面都是获取一个网页的数据,如果源数据网页是有分页的,那如何抓取

三、抓取多个网页数据

# 抓取双色球历史数据
# 编码:utf-8
import requests
import json
import random
import time
import pandas as pddata_list = []
# 抓取多少页数据
pageNo = 2
# 页数
pageSize = 30# 只需要期号、红球、蓝球("code", "red", "blue")三个数据
columns = ["code", "red", "blue"]
df = pd.DataFrame(columns=columns)for page in range(1, pageNo+1):url = 'http://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice?name=ssq&issueCount=&issueStart=&issueEnd=&dayStart=&dayEnd=&pageSize=' + \str(pageSize) + '&week=&systemType=PC&pageNo='url2 = url + str(page)# request header,其中最关键的一项,User-Agent,可以写个agent_list,每次请求,随机选择一个agent,像这样:agent_list = ["Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5","Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7","Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"]headers = {'User-Agent': random.choice(agent_list),  # 在调用的时候,随机选取一个就可以了# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299','Referer': 'http://www.cwl.gov.cn/ygkj/wqkjgg/ssq/','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1','Cookie': 'xxxxxxxxx'  # 加入自己的Cookie}# 使用代理IPwbdata = requests.get(url2, headers=headers).text# 随机等待间隔访问 随机等待0.5-3秒time.sleep(random.uniform(0.5, 3))data = json.loads(wbdata)news = data['result']# 过滤不要的元素数据new_json = json.dumps([{key: x[key] for key in columns} for x in news])# 再将JSON 数组转换为 Python 列表listnew_response = json.loads(new_json)# 把抓取每一个网页的数据加入data_list数组中(python中list) extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) 不能用append()data_list.extend(new_response)print('------------1.抓取到第' + str(page) + '页数据---------------')# print(data_list)
for n, arr in enumerate(data_list):df.loc[n+1] = arr  # 一次插入一行数据
df.to_excel("双色球历史数据.xlsx")
df.head()
print('数据导出导出完成:双色球历史数据.xlsx')

,如果这个编程语言完全不会,用chatgpt来写代码还是有点困难的,对于编程人员来说chatpgt就很好用

参考:

python怎样抓取js生成的页面_ITPUB博客

python抓取数据,pandas 处理并存储为excel_python pandas生成excel_格物致理,的博客-CSDN博客

【道高一尺,魔高一丈】Python爬虫之如何应对网站反爬虫策略_python应对反爬虫策略_Python程序员小泉的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3653.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用ChatGPT+爬虫搞钱,赚了!

这几个月真是太科幻了,各路令人赞叹的AI产品接连问世,感觉幻想过的未来已在眼前。就与多年前移动互联网的普及一样,我们正处于AI改变世界的前夜。 在众多优秀的人工智能模型中,以ChatGPT最为火爆!其在3月推出的插件功能…

微软new bing chatgpt 逆向爬虫实战

gospider 介绍 gospider 是一个golang 爬虫神器,它内置了多种反爬虫模块,是golang 爬虫必备的工具包 安装 go get -u gitee.com/baixudong/gospidergitee地址 https://gitee.com/baixudong/gospidergithub地址 https://github.com/baixudong007/gospider开始ne…

用ChatGPT+Python爬虫变现,你学会了吗?

今年真是太科幻了,各路令人赞叹的AI产品接连问世,感觉幻想过的未来已在眼前。就与多年前移动互联网的普及一样,我们正处于AI改变世界的前夜。 在众多优秀的人工智能产品中,以ChatGPT最为火爆!在OpenAI为其推出了GPT-4…

chatgpt帮你写爬虫程序

场景: chatgpt帮你写爬虫程序,轻松获取工作需要的数据 方法 安装python环境import requests from bs4 import BeautifulSoup import pandas as pd# 设置请求头部,模拟浏览器访问 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64…

ChatGPT编程秀:做一个简单爬虫程序

随着ChatGPT的大火,越来越多的人习惯于用ChatGPT搞一些有趣的事。对于一个资深的爬虫程序来说,体验下ChatGPT做爬虫程序也是很有意思的事情。 首先想想我们的问题域,我想到几个问题: 不能用HTTP请求去爬,如果我直接用…

ChatGPT 帮我自动编写 Python 爬虫脚本

都知道最近ChatGPT聊天机器人爆火,我也想方设法注册了账号,据说后面要收费了。 ChatGPT是一种基于大语言模型的生成式AI,换句话说它可以自动生成类似人类语言的文本,把梳理好的有逻辑的答案呈现在你面前,这完全不同于…

ChatGPT 和爬虫有什么区别

目录 ChatGPT的概念和功能 爬虫的概念和功能 ChatGPT和爬虫的区别 ChatGPT的概念和功能 ChatGPT是一个基于自然语言处理和机器学习的智能对话模型,具有以下功能: 1. 问题回答:ChatGPT可以回答用户提出的各种问题。不论是有关常识、历史、科…

ChatGPT做爬虫的第一步

做爬虫就是搞数据, 专业的人做专业的事, ChatGPT阅虫无数, 搞个小爬虫, So Easy! 我知道可以百度到下载图片的代码, 但是我不想百度了, 一切交给ChatGPT 你只需要问他: 怎么用Nodejs下载图片? 其中,url是图片的地址,filePath是保存图片的本地路径。使…

新模式!chatGPT+Python爬虫接私单怎么玩?

简单来说,有了第三方插件的加持, ChatGPT 不再只是一个你问我答的语言模型,它更像是一个懂得人类语言的AI助手,不仅可以通过扩展插件学习到定制化的知识,还能帮助我们处理一些日常事务;相当于给 ChatGPT 装…

ChatGPT非常火,我用它自动编写Python爬虫脚本。结果出乎意料。

前言 都知道最近ChatGPT聊天机器人爆火,我也想方设法注册了账号,据说后面要收费了。 ChatGPT是一种基于大语言模型的生成式AI,换句话说它可以自动生成类似人类语言的文本,把梳理好的有逻辑的答案呈现在你面前,这完全不…

chatgpt赋能python:Python爬虫技巧:如何爬取付费资源

Python 爬虫技巧:如何爬取付费资源 Python 是一个强大的编程语言,它可以用来进行各种各样的数据处理和分析任务,其中包括爬取网页。在互联网时代,许多人都需要获取付费资源,但不愿意花费高昂的费用购买,本…

ChatGPT 和爬虫有什么区别?

ChatGPT是一种基于人工智能的对话模型,它通过训练大量的文本数据来生成自然语言回复。它可以用于实现智能对话系统,能够理解用户的输入并生成相应的回复。ChatGPT的目标是模拟人类对话,使得对话更加流畅和自然。 而爬虫是一种用于自动化地从…

ChatGPT 8个场景下的灵活应用技巧,让您事半功倍!

文末加小助手微信,回复ChatGPT,领取一份 66个ChatGPT副业赚钱技巧(原版) ChatGPT在多个场景下都可以发挥作用,从问答到推理,从写代码到改写内容,从信息解释到信息总结,从信息提取到生…

ChatGPT如何应用在数据治理的具体场景中?

自从ChatGPT爆火以来,技术圈的爆炸新闻是一波接一波,让人目不暇接,突然有了一种“人间一日,AI一年的感觉”。上周就有几条重磅新闻,来跟大家分享一下: New Bing 对所有用户放开,注册即可用周三…

漫画:ChatGPT的应用场景有哪些?

第一,文案创作 ChatGPT可以通过用户输入的提示,创作出相应的文本内容。 媒体作者可以给ChatGPT提出要求,让ChatGPT根据某一主题生成的媒体文案。 广告策划人员可以把要推广的商品信息输入给ChatGPT,让ChatGPT针对此商品生成一段广…

ChatGPT 入门教程||ChatGPT 应用场景1:让AI回答问题||ChatGPT应用场景2:基于已有的示例回答

ChatGPT 应用场景1:让AI回答问题 这个场景应该是使用 AI 产品最常见的方法。以 ChatGPT 为例,一般就是你提一个问题,ChatGPT 会给你答案,比如像这样: 在这个场景下,prompt 只要满足前面提到的基本原则&am…

ChatGPT检测器来了!支持中英双语

编|郭必扬 源|SimpleAI 那一夜... 2022年11月30号,OpenAI推出了ChatGPT,给NLP届乃至各行各业的人带来了巨大的惊喜和惊吓[1];2022年12月5号,由于受到ChatGPT的冲击,Stack Overflow宣布禁止用户…

ChatGPT专业应用:纯英文视频-中英文快速字幕添加

正文共 900字,阅读大约需要 3 分钟 视频翻译、内容制作人群必备技巧,您将在3分钟后获得以下超能力: 1.无需英文基础,纯英文视频翻译 2.中英文转译 Beezy评级 :A级 *经过寻找和一段时间的学习, 一部分人能…

全网最详细中英文ChatGPT-API文档(一)开始使用ChatGPT——导言

开始使用ChatGPT导言 Introduction 导言Overview 概述Key concepts 关键概念Prompts and completions 提示和完成Tokens 标记/符号Models 模型Next steps 下一步步骤 其它资料下载 Introduction 导言 Overview 概述 The OpenAI API can be applied to virtually any task tha…

一场关于ChatGPT话语权的深度思考:人类会在大模型中迷失自我吗?

大数据文摘授权转载自AI科技评论 作者:Elizabeth Weil 译者:ChatGPT 编辑:孙溥茜 ChatGPT 之风愈演愈烈,华盛顿大学语言学家 Emily M. Bender 公开反对让大模型(LLM)过度介入人们的生活。 谷歌和亚马逊在论…