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

这篇具有很好参考价值的文章主要介绍了小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

User-Agent获取地方:

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

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

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

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

 网页获取位置:

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

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

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

def get_ip_pool(cnt):
	"""获取代理ip的函数"""
	url_api = '获取代理IP的API地址'
	try:
		r = requests.get(url_api)
		res_text = r.text
		res_status = r.status_code
		print('获取代理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 ret
	except 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秒

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

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

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

官网:阳光开奖

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

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

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

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

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

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

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

# 抓取双色球历史数据
# 编码:utf-8
import requests
import json
import random
import time
import pandas as pd

data_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).text

    wbdata = requests.get(url2, headers=headers).text
    time.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

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

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

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

# 抓取双色球历史数据
# 编码:utf-8
import requests
import json
import random
import time
import pandas as pd

data_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
    }

    # 使用代理IP

    wbdata = 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 列表list
    new_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 pd

data_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
    }

    # 使用代理IP

    wbdata = 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 列表list
    new_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博客文章来源地址https://www.toymoban.com/news/detail-430222.html

到了这里,关于小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 『爬虫四步走』手把手教你使用Python抓取并存储网页数据!

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,**本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程。**如果你还在入门爬虫阶段或者不清楚爬虫的具体工作流程,那么应该仔细阅读本文! 第一步:

    2024年02月04日
    浏览(64)
  • Python网页抓取- python selenium使用方法和代码示例

    Selenium可以模拟网页操作,抓取页面内容,主要通过webdriver模块实现,为了方便理解,按照实例的操作步骤逐一介绍(函数参数不具体展开,参考下面代码实例即可理解): 获取browser实例 通过webdriver.Chorme(), webdriver.Edge(), webdriver.Firefox(), 来获取browser实例: browser = webdriver.C

    2024年01月23日
    浏览(67)
  • 爬虫项目(五):抓取网页所有图片

    推荐本人书籍《Python网络爬虫入门到实战》 ,详细介绍见👉: 《Python网络爬虫入门到实战》 书籍介绍 原理:抓取该链接中所有的图片格式。基于selenium来获取,自动下载到output文件夹中。

    2024年02月07日
    浏览(55)
  • 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28

    链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwd=abc1  利用爬虫抓取双色球开奖号码,获取完整数据,简洁45行代码实现,更新时间2023-06-28 这是网上的数据,怎么将它爬取下来 它将只爬取最近30期的双色球开奖号码,并将结果写入到名为 \\\"双色球开奖结果.csv\\\" 的文件中。   生成

    2024年02月15日
    浏览(156)
  • Python网页爬虫代码

    网页爬虫是一种自动化程序,可以自动地访问网页并提取其中的信息。它可以用于各种目的,例如搜索引擎的索引、数据挖掘、价格比较、舆情监测等。网页爬虫通常使用编程语言编写,例如Python、Java等。 以下是一个简单的示例,使用 Python 和 requests 库进行网页爬取: 在这

    2024年02月15日
    浏览(47)
  • 【Python】极简部署私有化ChatGPT-Web,使用Flask框架编写网页版ChatGPT

    python环境下可极简配置 windows、linux、mac os均可部署 支持多用户使用 多对话管理 公式显示 流式逐字加载显示 代码高亮 仓库链接地址:https://github.com/LiangYang666/ChatGPT-Web,用的好麻烦给个star啦 可参照README 执行 python flask_main.py 运行程序.若程序中未指定apikey也可以在终端执行时

    2024年02月01日
    浏览(63)
  • 编程小白的自学笔记九(python爬虫入门+代码详解)

    编程小白的自学笔记八(python中的多线程) 编程小白的自学笔记七(python中类的继承)   编程小白的自学笔记六(python中类的静态方法和动态方法)  编程小白的自学笔记五(Python类的方法)  编程小白的自学笔记四(正则表达式模块search函数)  目录 系列文章目录 前言

    2024年02月16日
    浏览(44)
  • 编程小白的自学笔记十(python爬虫入门二+实例代码详解)

    编程小白的自学笔记九(python爬虫入门+代码详解) 编程小白的自学笔记八(python中的多线程)   编程小白的自学笔记七(python中类的继承)  编程小白的自学笔记六(python中类的静态方法和动态方法) 编程小白的自学笔记五(Python类的方法)  目录 系列文章目录 前言 一

    2024年02月16日
    浏览(38)
  • Python爬虫实战(高级篇)—3百度翻译网页版爬虫(附完整代码)

    库 安装 js2py pip install js2py requests pip install requests 这里我们发现所需的参数: 1、sign(这是最重要的!!) 2、token 3、ts,时间戳 原帖查看

    2024年02月08日
    浏览(43)
  • 如何用python编写抢票软件,python爬虫小程序抢购

    大家好,小编来为大家解答以下问题,python小程序抢购脚本怎么写,如何用python编写抢票软件,今天让我们一起来看看吧! 需要的工具 fiddler python 3.8 第一步——抓包 由于之前我在大学的时候就有用python写脚本抢图书馆座位的经验,所以大概了解这种公共预约平台,其实就一

    2024年04月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包