鱼C论坛

 找回密码
 立即注册
查看: 240|回复: 6

怎么爬取网页中的信息

[复制链接]
发表于 2024-3-29 14:52:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lengyue869 于 2024-3-30 15:41 编辑

这个网址里面有多组数据,怎么爬取每组数据到excel啊
screenshot.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-29 14:53:17 | 显示全部楼层
要爬取网页中的信息,可以使用Python中的requests库来发送HTTP请求获取网页内容,再使用BeautifulSoup库来解析网页内容。

首先,需要安装requests和beautifulsoup库。可以使用以下命令在命令行中安装这两个库:

  1. pip install requests beautifulsoup4
复制代码


接下来,可以使用以下代码来爬取网页的内容并解析出需要的数据:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import xlwt

  4. # 发送HTTP GET请求获取网页内容
  5. url = 'https://xinchuangka.com//vniao/4EEBFBF5'
  6. response = requests.get(url)
  7. html = response.text

  8. # 创建一个Excel文件
  9. workbook = xlwt.Workbook(encoding='utf-8')
  10. sheet = workbook.add_sheet('data')

  11. # 使用BeautifulSoup解析页面
  12. soup = BeautifulSoup(html, 'html.parser')

  13. # 找到每组数据所在的元素
  14. data_elements = soup.find_all('div', class_='data-group')

  15. # 遍历每组数据
  16. for i, data_element in enumerate(data_elements):
  17.     # 获取每组数据的标题和内容
  18.     title = data_element.find('div', class_='data-title').text.strip()
  19.     content = data_element.find('div', class_='data-content').text.strip()

  20.     # 将数据写入Excel表格
  21.     sheet.write(i, 0, title)
  22.     sheet.write(i, 1, content)

  23. # 保存Excel文件
  24. workbook.save('data.xls')
复制代码


以上代码会将网页中每组数据的标题和内容写入Excel文件中。请注意,代码中假设网页中的数据是以`<div class="data-group">`为包裹的,如果实际情况有所不同,需要根据网页结构进行相应的修改。此外,代码使用了xlwt库来创建和保存Excel文件,如果需要使用xlsx格式,可以使用openpyxl库代替。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-29 15:55:56 | 显示全部楼层
各位大佬别光顾着下单,给个思路啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-29 15:56:11 | 显示全部楼层
lengyue869 发表于 2024-03-29 15:55
各位大佬别光顾着下单,给个思路啊


当爬取网页中的信息时,一般可以使用以下步骤:

1. 使用Python中的requests库发送HTTP请求获取网页内容。

2. 使用合适的解析库,例如BeautifulSoup或Scrapy解析网页内容,提取目标数据。

3. 根据网页结构和目标数据的特征,编写相应的代码来提取所需的数据。

4. 将提取到的数据进行处理和保存。可以选择将数据保存到文本文件、CSV文件、Excel文件或数据库等。

下面是一个简单的示例代码,演示如何爬取一个网页中的数据:

  1. import requests
  2. from bs4 import BeautifulSoup

  3. # 发送HTTP GET请求获取网页内容
  4. url = 'https://example.com'
  5. response = requests.get(url)
  6. html = response.text

  7. # 使用BeautifulSoup解析页面
  8. soup = BeautifulSoup(html, 'html.parser')

  9. # 找到目标数据所在的元素,并提取数据
  10. data_elements = soup.find_all('div', class_='data')
  11. for data_element in data_elements:
  12.     title = data_element.find('h2').text
  13.     content = data_element.find('p').text
  14.    
  15.     # 在这里可以对数据进行处理和保存
  16.     print(f'Title: {title}')
  17.     print(f'Content: {content}')
复制代码


在实际应用中,还需要注意网页的反爬措施,例如验证码、限制访问频率等。此外,需要遵守网站的爬虫规则,避免给服务器带来过大的负担。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-29 16:08:05 | 显示全部楼层
最好别乱爬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-29 16:14:04 | 显示全部楼层

这个是个人网站应该没什么影响吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-30 15:34:30 | 显示全部楼层
本帖最后由 lengyue869 于 2024-4-4 00:37 编辑

PFZQ
  1. %%time
  2. import requests
  3. import json
  4. import pandas as pd
  5. from datetime import datetime
  6. import winreg

  7. current_time = datetime.now().strftime("%m%d___%H.%M")

  8. key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
  9.                      r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
  10. deskPath = winreg.QueryValueEx(key, "Desktop")[0]

  11. url = "https://xinchuangka.com/shop/shop/getAccount"
  12. myheaders = {
  13.     "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
  14. }

  15. data_list1 = []
  16. data_list2 = []

  17. lastpage = 0
  18. page = 50
  19. allowed_regions = ["卡拉曼达","暗影岛","征服之海","诺克萨斯","战争学院","雷瑟守备","艾欧尼亚","黑色玫瑰"]

  20. for page_num in range(page):
  21.     mydata = {"goodsid": "1765", "page": page_num + 1, "userid": "62", "type": "new"}
  22.     html = requests.post(url, headers=myheaders, data=mydata).text
  23.     text = json.loads(html)['data']

  24.     if len(text) > 0:
  25.         lastpage += 1

  26.         for item in text:
  27.             area = item['number']['2']
  28.             if area not in allowed_regions:
  29.                 continue  # Skip if region not in allowed list
  30.             name = item['number']['3']
  31.             detail = item['number']['4']

  32.             lst1 = [i for i in detail.split('----')]
  33.             if not "英雄:" in lst1[2]:
  34.                 lst1[2] = "英雄:" + lst1[2]
  35.             lst = [i.split(':') for i in lst1 if ":" in i]

  36.             data_dict = {"大区": area, "ID": name, **{item[0]: item[1] for item in lst}}
  37.             data_dict['页码'] = page_num + 1  # 添加页码字段

  38.             if '最后游戏' in data_dict:
  39.                 data_dict['最后游戏'] = data_dict['最后游戏'][:10]
  40.                 last_game_date = pd.to_datetime(data_dict['最后游戏'], format="%Y-%m-%d")
  41.                 days_difference = (pd.Timestamp.now() - last_game_date).days
  42.                 if days_difference > 20:
  43.                     data_list2.append(data_dict)
  44.             data_list1.append(data_dict)

  45. df1 = pd.DataFrame(data_list1)
  46. df2 = pd.DataFrame(data_list2)

  47. numeric_columns = [column for column in df1.columns if column != '最后游戏']
  48. df1[numeric_columns] = df1[numeric_columns].apply(pd.to_numeric, errors='ignore')
  49. df2[numeric_columns] = df2[numeric_columns].apply(pd.to_numeric, errors='ignore')

  50. columns = ["页码", "大区", "ID", "等级", "英雄", "皮肤", "单", "组", "精粹", "最后游戏"]
  51. df1 = df1[columns].sort_values(by=["最后游戏", "皮肤", "等级"], ascending=[True, False, True])
  52. df2 = df2[columns].sort_values(by=["最后游戏", "皮肤", "等级"], ascending=[True, False, True])

  53. with pd.ExcelWriter(f"{deskPath}\PF___{current_time}.xlsx", engine='xlsxwriter') as writer:
  54.     df1.to_excel(writer, index=False, sheet_name='Sheet2')
  55.     df2.to_excel(writer, index=False, sheet_name='Sheet1')

  56. print(f"共{lastpage}页,数据已保存到桌面。")
复制代码




All Area
  1. %%time
  2. import requests
  3. import json
  4. import pandas as pd
  5. from datetime import datetime
  6. import winreg
  7. from datetime import datetime


  8. current_time = datetime.now().strftime("%m%d___%H.%M")

  9. key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
  10.                      r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
  11. deskPath = winreg.QueryValueEx(key, "Desktop")[0]

  12. url = "https://xinchuangka.com/shop/shop/getAccount"
  13. myheaders = {
  14.     "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
  15. }


  16. data_list = []

  17. lastpage = 0
  18. page = 200
  19. lst_goods=["1734","1736","1739","1741","1743","1744","1750","1751"]

  20. for goodsid in lst_goods:
  21.     for page_num in range(page):
  22.         mydata = {"goodsid": goodsid, "page": page_num + 1, "userid": "62", "type": "new"}
  23.         html = requests.post(url, headers=myheaders, data=mydata).text
  24.         text = json.loads(html)['data']

  25.         if len(text) > 0:
  26.             lastpage += 1

  27.             for item in text:
  28.                 area = item['number']['2']
  29.                 name = item['number']['3']
  30.                 detail = item['number']['4']

  31.                 lst1 = [i for i in detail.split('----')]
  32.                 if not "英雄:" in lst1[2]:
  33.                     lst1[2] = "英雄:" + lst1[2]
  34.                 lst = [i.split(':') for i in lst1 if ":" in i]

  35.                 data_dict = {"大区": area, "ID": name, **{item[0]: item[1] for item in lst}}
  36.                 data_dict['页码'] = page_num + 1  # 添加页码字段

  37.                 if '最后游戏' in data_dict:
  38.                     data_dict['最后游戏'] = data_dict['最后游戏'][:10]
  39.                     last_game_date = pd.to_datetime(data_dict['最后游戏'], format="%Y-%m-%d")
  40.                     days_difference = (pd.Timestamp.now() - last_game_date).days
  41.                     if days_difference > 30:
  42.                         data_list.append(data_dict)
  43.                     

  44. df = pd.DataFrame(data_list)

  45. numeric_columns = [column for column in df.columns if column != '最后游戏']
  46. df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric, errors='ignore')

  47. columns = ["页码", "大区", "ID", "等级", "英雄", "皮肤", "单", "组", "精粹", "最后游戏"]
  48. df = df[columns].sort_values(by=["皮肤","最后游戏",  "等级"], ascending=[False,True,  True])

  49. with pd.ExcelWriter(f"{deskPath}\All___{current_time}.xlsx", engine='xlsxwriter') as writer:
  50.     sht_name=df['大区'][0]   
  51.     df.to_excel(writer, index=False, sheet_name='Sheet1')

  52. print(f"共{lastpage}页,数据已保存到桌面。")
复制代码


ALL EZ
  1. %%time
  2. import requests
  3. import json
  4. import pandas as pd
  5. from datetime import datetime
  6. import winreg
  7. from datetime import datetime


  8. current_time = datetime.now().strftime("%m%d__%H.%M")

  9. key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
  10.                      r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
  11. deskPath = winreg.QueryValueEx(key, "Desktop")[0]

  12. url = "https://luck.92.edri.mobi/shop/shop/getAccount"
  13. myheaders = {
  14.     "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
  15. }


  16. data_list = []

  17. lastpage = 0
  18. page = 200
  19. dic_goods={"67305":"1802","67310":"1807","67311":"1808","67320":"1817","67328":"1825","67321":"1818","67327":"1824","67313":"1810","67316":"1813","67318":"1815"}
  20. # dic_goods={"67305":"1802"}
  21. for agent_goodsid,goodsid in dic_goods.items():
  22.     for page_num in range(page):
  23.         mydata = {"agent_goodsid" : agent_goodsid , "goodsid": goodsid, "page": page_num + 1, "userid": "959", "type": "new"}
  24.         html = requests.post(url, headers=myheaders, data=mydata).text
  25.         text = json.loads(html)['data']

  26.         if len(text) > 0:
  27.             lastpage += 1

  28.             for item in text:
  29.                 area = item['number']['2']
  30.                 name = item['number']['3']
  31.                 detail = item['number']['4']

  32.                 lst1 = [i for i in detail.split('----')]
  33.                 if not "英雄:" in lst1[2]:
  34.                     lst1[2] = "英雄:" + lst1[2]
  35.                 lst = [i.split(':') for i in lst1 if ":" in i]

  36.                 data_dict = {"大区": area, "ID": name, **{item[0]: item[1] for item in lst}}
  37.                 data_dict['页码'] = page_num + 1  # 添加页码字段
  38.                 data_list.append(data_dict)

  39. df = pd.DataFrame(data_list)

  40. numeric_columns = [column for column in df.columns]
  41. df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric, errors='ignore')
  42. df = df[df['皮肤'] > 400]

  43. columns = ["页码", "大区", "ID", "等级", "英雄", "皮肤", "单", "组"]
  44. df = df[columns].sort_values(by=["皮肤", "等级"], ascending=[False, True])

  45. with pd.ExcelWriter(f"{deskPath}\EZ__All__{current_time}.xlsx", engine='xlsxwriter') as writer:  
  46.     df.to_excel(writer, index=False, sheet_name='Sheet1')

  47. print(f"共{lastpage}页,数据已保存到桌面。")
复制代码


MX_New
  1. import requests
  2. import json
  3. import pandas as pd
  4. from datetime import datetime
  5. import winreg,sys
  6. from datetime import datetime
  7. import random,time


  8. key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
  9.                      r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
  10. deskPath = winreg.QueryValueEx(key, "Desktop")[0]

  11. url = "https://xinchuangka.com/shop/shop/getAccount"

  12. # 随机生成User-Agent
  13. user_agents = [
  14.     "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
  15.     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
  16.     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",
  17.     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
  18. ]

  19. data_list = []
  20. lastpage = 0
  21. allowed_regions = ["卡拉曼达","暗影岛","征服之海","诺克萨斯","战争学院","雷瑟守备","艾欧尼亚","黑色玫瑰"]
  22. lst_goods=["2129","2131","2134","2136","2138","2139","2145","2146"]
  23. # lst_goods=["2156"]#皮肤

  24. for goodsid in lst_goods:   
  25.     #获取每个区的总页数
  26.     mydata = {"goodsid": goodsid, "page": "1", "userid": "62", "type": "new"}   
  27.     myheaders = {"user-agent": random.choice(user_agents)}
  28.     html = requests.post(url, headers=myheaders, data=mydata).text
  29.     page = -(-json.loads(html)['count']//10)   
  30.    
  31.     if page==0:
  32.         continue     
  33.     else:
  34.         daqu=json.loads(html)['data'][0]['number']['2']
  35.         print(f"{daqu},page:{page}")
  36.    
  37.     for page_num in range(page):
  38.         mydata = {"goodsid": goodsid, "page": page_num + 1, "userid": "62", "type": "new"}
  39.         myheaders = {"user-agent": random.choice(user_agents)}
  40.         html = requests.post(url, headers=myheaders, data=mydata).text
  41.         text = json.loads(html)['data']
  42.         lastpage += 1

  43.         for item in text:
  44.             area = item['number']['2']
  45.             name = item['number']['3']
  46.             detail = item['number']['4']

  47.             if area not in allowed_regions:
  48.                 continue  # Skip if region not in allowed list               

  49.             lst1 = [i for i in detail.split('----')]
  50.             if not "英雄:" in lst1[2]:
  51.                 lst1[2] = "英雄:" + lst1[2]
  52.             lst = [i.split(':') for i in lst1 if ":" in i]

  53.             data_dict = {"大区": area, "ID": name, **{item[0]: item[1] for item in lst}}
  54.             data_dict['页码'] = page_num + 1  # 添加页码字段
  55.             data_list.append(data_dict)
  56.         # 添加延迟,避免请求过于频繁
  57.         time.sleep(random.uniform(0.1, 0.3))            

  58. df = pd.DataFrame(data_list)
  59. if df.empty:
  60.     print("没有数据,程序退出。")
  61.     sys.exit()

  62. numeric_columns = [column for column in df.columns if column != '最后游戏']
  63. df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric, errors='ignore')
  64. df = df[df['皮肤'] > 300]

  65. columns = ["页码", "大区", "ID", "等级", "英雄", "皮肤", "单", "组", "精粹"]
  66. df = df[columns].sort_values(by=["皮肤", "等级"], ascending=[False, True])

  67. exl_name = "MX__PF" if goodsid == "2156" else "MX"

  68. current_time = datetime.now().strftime("%m%d__%H.%M")
  69. with pd.ExcelWriter(f"{deskPath}\\{exl_name}__{current_time}.xlsx", engine='xlsxwriter') as writer:
  70.     df.to_excel(writer, index=False, sheet_name='Sheet1')

  71. print(f"共{lastpage}页,数据已保存到桌面。")
  72. import winsound
  73. winsound.Beep(440,1000)
复制代码



JS
https://mx.youyoupay.com/shop/0C5BA23E
  1. // 定义一个函数,用于连续点击链接元素
  2. function clickLinkMultipleTimesWithDelay(numClicks, delay) {
  3.     // 获取链接元素
  4.     var linkElement = document.querySelector('a[onclick="getE()"]');
  5.    
  6.     // 如果链接元素存在,则执行点击操作
  7.     if (linkElement) {
  8.         var i = 0;
  9.         function clickNext() {
  10.             if (i < numClicks) {
  11.                 linkElement.click(); // 模拟点击链接元素
  12.                 i++;
  13.                 setTimeout(clickNext, delay); // 设置延迟后继续点击
  14.             }
  15.         }
  16.         clickNext();
  17.     } else {
  18.         console.log('找不到链接元素。');
  19.     }
  20. }

  21. // 调用函数,点击链接元素10次,每次点击间隔1000毫秒(1秒)
  22. clickLinkMultipleTimesWithDelay(10, 500);
复制代码

  1. Sub ExtractGoodsInfo()
  2.     Dim html As String
  3.     Dim startPos As Long, endPos As Long
  4.     Dim idStartPos As Long, idEndPos As Long
  5.     Dim nameStartPos As Long, nameEndPos As Long
  6.     Dim id As String, name As String
  7.     Dim rowNum As Long
  8.    
  9.     ' 获取 HTML 代码
  10.     html = Range("A1").Value
  11.    
  12.     ' 清空结果列
  13.     Range("B:F").ClearContents
  14.     Range("B:F").NumberFormatLocal = "@"
  15.    
  16.     ' 初始化行号
  17.     rowNum = 2
  18.    
  19.     ' 提取商品信息
  20.     startPos = 1
  21.     Do
  22.         ' 提取商品ID
  23.         idStartPos = InStr(startPos, html, "value=""") + Len("value=""")
  24.         If idStartPos = 0 Then Exit Do ' 如果找不到ID,直接退出
  25.         idEndPos = InStr(idStartPos, html, """", vbBinaryCompare)
  26.         id = Mid(html, idStartPos, idEndPos - idStartPos)
  27.         
  28.         ' 提取商品名称
  29.         nameStartPos = InStr(idEndPos, html, ">") + 1
  30.         nameEndPos = InStr(nameStartPos, html, "<")
  31.         name = Trim(Mid(html, nameStartPos, nameEndPos - nameStartPos))
  32.         
  33.         ' 替换商品名称中的"阿九"为""
  34.         If InStr(name, "米花") Or InStr(name, "阿九") Or InStr(name, "萌新") Or InStr(name, "白云") Then
  35.             name = Mid(name, 5)
  36.         End If
  37.         
  38.         ' 输出到表格
  39.         Cells(rowNum, 2).Value = CStr(id)
  40.         Cells(rowNum, 3).Value = name
  41.         
  42.         ' 更新行号和搜索起始位置
  43.         rowNum = rowNum + 1
  44.         startPos = nameEndPos
  45.         
  46.         ' 如果名称为"男爵领域",则跳出循环
  47.         If InStr(name, "男爵领域") Or InStr(name, "巨龙之巢") Or InStr(name, "皮城警备") Then Exit Do
  48.         
  49.     Loop
  50.    
  51.     arr = Array("卡拉曼达", "暗影岛", "征服之海", "诺克萨斯", "战争学院", "雷瑟守备", "艾欧尼亚", "黑色玫瑰", "皮肤")
  52.     iRow = Cells(Rows.Count, 3).End(xlUp).Row
  53.     For i = iRow To 2 Step -1
  54.         bYN = False
  55.         For Each ar In arr
  56.             If InStr(Cells(i, 3).Value, ar) Then
  57.                 bYN = True
  58.                 Exit For
  59.             End If
  60.         Next
  61.         
  62.         If bYN = False Then Rows(i).Delete
  63.     Next
  64.    
  65.     iRow = Cells(Rows.Count, 3).End(xlUp).Row
  66.    
  67.     str1 = ""
  68.     For i = 2 To iRow
  69.         str1 = str1 + "," + """" + Cells(i, 2).Text + """"
  70.     Next
  71.    
  72.     Range("f5").NumberFormatLocal = "@"
  73.     Range("f5") = Mid(str1, 2)
  74.    
  75. End Sub

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 07:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表