抓取使用 php 会话的网站时遇到 cookie 错误
Meet cookie error when crawl website that use php session
我想抓取以下页面:https://db.aa419.org/fakebankslist.php 使用搜索词“sites”。
我在 python 中使用请求包。没有尝试 selenium 的计划 b/c 此页面中没有 javascript,我也不需要单击任何按钮。我觉得requests包应该有爬取的能力。
对于网站本身,我猜它使用 php 发送查询词。因此,我使用 requests.post() 创建了一个 php 会话并使用 response.cookies 检索 cookie,然后在以下 post 请求中将 cookie 提供给站点。代码结构如下:
#crawl 1st page with search word in url
url='https://db.aa419.org/fakebankslist.php?psearch=sites&Submit=GO&psearchtype='
response = requests.post(url)
cookies= response.cookies
print(cookies)
#crawl page 2-4
for i in range(2, 5):
url = 'https://db.aa419.org/fakebankslist.php?start={}'.format(str(1+20*(i-1)))
response = requests.post(url, cookies=cookies)
cookies= response.cookies #update cookie for each page
print(cookies)
但是,它只适用于前 2 页。循环开始爬取第 3 页后,cookie 变为空: 。我检查了第 3 页的响应,发现它是一些与我的查询词“sites”无关的随机页面。
谁能解释一下这种情况是怎么回事?我怎样才能继续抓取以下页面?提前致谢!
我不确定您要从该网站获得什么,但我会尽力提供帮助。
第一页结果可以通过这个url:
https://db.aa419.org/fakebankslist.php?psearch=essa&Submit=GO&start=1
开始键的值 1 表示页面上出现的第一个结果。由于每页有 19 个结果要查看第二页,您需要将 '1' 切换为 '21' :
https://db.aa419.org/fakebankslist.php?psearch=essa&Submit=GO&start=21
第二件事是你的请求应该使用 GET 方法。
I checked the response of page 3 and found it's some random page irrelevant to my query words "sites"
我认为这与网站的搜索引擎损坏有关。
希望这段代码对您有所帮助:
#crawl page 1-5
s = requests.Session()
for i in range(0, 5):
url = 'https://db.aa419.org/fakebankslist.php?psearch=essa&Submit=GO start='+str(1+i*20)
response = s.get(url)
cookies= s.cookies #update cookie for each page
print('For page ', i+1, 'with results from', 1+i*20, 'to', i*20+20, ', cookies are:', str(cookies))
我想抓取以下页面:https://db.aa419.org/fakebankslist.php 使用搜索词“sites”。
我在 python 中使用请求包。没有尝试 selenium 的计划 b/c 此页面中没有 javascript,我也不需要单击任何按钮。我觉得requests包应该有爬取的能力。
对于网站本身,我猜它使用 php 发送查询词。因此,我使用 requests.post() 创建了一个 php 会话并使用 response.cookies 检索 cookie,然后在以下 post 请求中将 cookie 提供给站点。代码结构如下:
#crawl 1st page with search word in url
url='https://db.aa419.org/fakebankslist.php?psearch=sites&Submit=GO&psearchtype='
response = requests.post(url)
cookies= response.cookies
print(cookies)
#crawl page 2-4
for i in range(2, 5):
url = 'https://db.aa419.org/fakebankslist.php?start={}'.format(str(1+20*(i-1)))
response = requests.post(url, cookies=cookies)
cookies= response.cookies #update cookie for each page
print(cookies)
但是,它只适用于前 2 页。循环开始爬取第 3 页后,cookie 变为空:
谁能解释一下这种情况是怎么回事?我怎样才能继续抓取以下页面?提前致谢!
我不确定您要从该网站获得什么,但我会尽力提供帮助。 第一页结果可以通过这个url:
https://db.aa419.org/fakebankslist.php?psearch=essa&Submit=GO&start=1
开始键的值 1 表示页面上出现的第一个结果。由于每页有 19 个结果要查看第二页,您需要将 '1' 切换为 '21' :
https://db.aa419.org/fakebankslist.php?psearch=essa&Submit=GO&start=21
第二件事是你的请求应该使用 GET 方法。
I checked the response of page 3 and found it's some random page irrelevant to my query words "sites"
我认为这与网站的搜索引擎损坏有关。
希望这段代码对您有所帮助:
#crawl page 1-5
s = requests.Session()
for i in range(0, 5):
url = 'https://db.aa419.org/fakebankslist.php?psearch=essa&Submit=GO start='+str(1+i*20)
response = s.get(url)
cookies= s.cookies #update cookie for each page
print('For page ', i+1, 'with results from', 1+i*20, 'to', i*20+20, ', cookies are:', str(cookies))