2016-11-28 65 views
0

我想用scrapy翻录一些需要认证的网站。 我读过这可能通过使用formdata,但我目前面临的问题是输入名称是每次刷新登录页面时随机生成的。Scrapy with dynamic content forms

下面是HTML代码:

<input type="text" name="MemberNameb326ccc51594e4" id="MemberNameb326ccc51594e4" size="15" maxlength="20" value="" tabindex="1"> 

我该如何面对呢?

回答

0

您不能使用输入的名字,因为它是动态的,你可以得到它的周边元素获取输入的参考,例如

<div id="static-id"><input type="text" name="MemberNameb326ccc51594e4" id="MemberNameb326ccc51594e4" size="15" maxlength="20" value="" tabindex="1"></div> 

一旦你的周围的容器,你可以得到该输入名称

+0

所以,我认为这可能是可以使用内部FORMDATA response.xpath任何输入字段满足您的需求。我似乎无法找到有关语法的任何示例。 – MDP

+0

https://doc.scrapy.org/zh/latest/topics/request-response.html#using-formrequest-from-response-to-simulate-a-user-login您需要刮掉表单,以便您知道当前的输入名称,然后动态地构建你的formdata –

0

也许可以更好地使用Python Beautifulsoup4模块,一旦HTML汤完成后,你可以使用re模块找到相应的ID,像这样:

#!/usr/bin/env python 
# -*- coding: UTF-8 -*- 
import requests 
import re 
from bs4 import BeautifulSoup 
#get the url page content 
html = request.get("http://mysite.url/toscrap").content 
#soup the html content 
soup = BeautifulSoup(html) 
#find all inputs containing "MemberName" in id field 
my_inputs = soup.findAll("input",{"id":re.compile("MemberName")}) 

这将给予你在哪里包含ID“成员名称

问候