哈岁NB 发表于 2023-3-1 23:26:08

爬虫

大佬们,这个网站为什么抓不到包呀http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87

isdkz 发表于 2023-3-1 23:28:29

你用什么抓的包?

哈岁NB 发表于 2023-3-1 23:35:46

isdkz 发表于 2023-3-1 23:28
你用什么抓的包?

这个,浏览器自带的

isdkz 发表于 2023-3-1 23:41:30

哈岁NB 发表于 2023-3-1 23:35
这个,浏览器自带的

抓得了包的,你那里没有是因为你在过滤器那里敲了一个三门峡

哈岁NB 发表于 2023-3-1 23:43:24

isdkz 发表于 2023-3-1 23:41
抓得了包的,你那里没有是因为你在过滤器那里敲了一个三门峡

那为什么界面有三门峡,搜索却搜不到这个数据呢

isdkz 发表于 2023-3-1 23:45:53

哈岁NB 发表于 2023-3-1 23:43
那为什么界面有三门峡,搜索却搜不到这个数据呢

你敲的那里是筛选请求的,不是搜索页面的内容的,

你要搜索页面的内容按 CTRL + F 就会出来一个搜索框,那个才是搜索资源的

哈岁NB 发表于 2023-3-1 23:46:35

isdkz 发表于 2023-3-1 23:45
你敲的那里是筛选请求的,不是搜索页面的内容的,

你要搜索页面的内容按 CTRL + F 就会出来一个搜索框 ...

明白了,感谢感谢

哈岁NB 发表于 2023-3-1 23:48:39

isdkz 发表于 2023-3-1 23:45
你敲的那里是筛选请求的,不是搜索页面的内容的,

你要搜索页面的内容按 CTRL + F 就会出来一个搜索框 ...

那请问一下,这种页面换日期,它的url都不变换,这该怎么爬取数据呢

isdkz 发表于 2023-3-1 23:58:11

哈岁NB 发表于 2023-3-1 23:48
那请问一下,这种页面换日期,它的url都不变换,这该怎么爬取数据呢

url 不变说明它是通过 ajax 请求的,ajax 的请求可以在 xhr 那里看



如果这个请求的响应数据你看不出是怎么解析的话,可以点击它的发起程序跳转到发起这个请求的 js 脚本那里,

通过研究 js 代码来确定这个响应数据应该怎么解析

哈岁NB 发表于 2023-3-2 00:00:08

isdkz 发表于 2023-3-1 23:58
url 不变说明它是通过 ajax 请求的,ajax 的请求可以在 xhr 那里看




好的,感谢感谢

哈岁NB 发表于 2023-3-2 00:02:45

isdkz 发表于 2023-3-1 23:58
url 不变说明它是通过 ajax 请求的,ajax 的请求可以在 xhr 那里看




那个日期下面那些东西有用吗

isdkz 发表于 2023-3-2 00:23:18

哈岁NB 发表于 2023-3-2 00:02
那个日期下面那些东西有用吗

有一些东西就是多余的,而且它这个显示的也不是很准确,你点击查看源之后就会发现那下面的一堆跟日期不是在同一个参数里面的





一个 & 符号连接一个参数,而且查看源那里看到的有一些符号被 url 编码了,这是为了免得跟连接表单参数还有表单键值的符号混淆了,

所以发到服务器那里时浏览器都会帮你编码的,因为 python 的 requests 那个库也会帮你编码,所以我们写没有编码之前的就好,

如果你对 http 协议不是特别熟悉的话就很难一下判断出哪些参数是有用的,哪些参数是不需要的,

而且这个服务不是我们开发的,我们也不了解他的一些参数是干嘛的,所以我们先把我们觉得必须加的加上去,

如果请求出异常了,我们再慢慢地添加,都是这样试出来的,后面熟练了也就没有那么费劲了,请求头也是一样的,

比如这个 ajax 请求,我给出一个代码给你参考,如果你觉得这个代码的结果符合预期就没必要添别的参数和请求头了:

import requests

url = 'http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87'
data = {'ctl00$ContentLeft$menuDate1$TextBox11': '2023-03-04'}
headers = {'User-Agent': 'Mozilla/5.0'}
resp = requests.get(url, data=data, headers=headers)
print(resp.text)

哈岁NB 发表于 2023-3-2 08:07:00

isdkz 发表于 2023-3-2 00:23
有一些东西就是多余的,而且它这个显示的也不是很准确,你点击查看源之后就会发现那下面的一堆跟日期不是 ...

那我要是想爬取一年的数据,那data = {'ctl00$ContentLeft$menuDate1$TextBox11': '2023-03-04'}这个我该怎么变成可变的呢

哈岁NB 发表于 2023-3-2 08:32:17

isdkz 发表于 2023-3-1 23:58
url 不变说明它是通过 ajax 请求的,ajax 的请求可以在 xhr 那里看




还有一个问题我想问一下,爬取这种公开数据违法吗

isdkz 发表于 2023-3-2 11:25:05

本帖最后由 isdkz 于 2023-3-2 11:26 编辑

哈岁NB 发表于 2023-3-2 08:07
那我要是想爬取一年的数据,那data = {'ctl00$ContentLeft$menuDate1$TextBox11': '2023-03-04'}这个我该 ...

对于日期的处理可以通过 datetime 这个库

示例代码:
import requests
from datetime import date, timedelta
from time import sleep

def slow_all_dates(year):
    d = date(year, 1, 1)
    while d.year == year:
      yield d
      sleep(1)
      d += timedelta(days=1)

url = 'http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87'
headers = {'User-Agent': 'Mozilla/5.0'}
for d in slow_all_dates(2022):
    data = {'ctl00$ContentLeft$menuDate1$TextBox11': f'{d}'}
    resp = requests.get(url, data=data, headers=headers)
    print(resp.text)

isdkz 发表于 2023-3-2 11:28:09

本帖最后由 isdkz 于 2023-3-2 11:29 编辑

哈岁NB 发表于 2023-3-2 08:32
还有一个问题我想问一下,爬取这种公开数据违法吗

只要你没有爬的太快对服务器造成负担一般都没有问题,

要是对服务器造成了负担就是攻击行为了

哈岁NB 发表于 2023-3-2 11:41:09

isdkz 发表于 2023-3-2 11:28
只要你没有爬的太快对服务器造成负担一般都没有问题,

要是对服务器造成了负担就是攻击行为了

好的,感谢感谢
页: [1]
查看完整版本: 爬虫