<form action="./"> 并计算网络抓取的参数
<form action="./"> and working out params for web scraping
我正在尝试从 C# 中的简单表单中抓取一些网页。
我的问题是试图找出对 post 的操作以及如何计算 post 参数。
我尝试提交的表格有:
<form method="post" action="./"
因为页面位于 www.foobar.com,所以我在我的 C# 代码中创建了一个 WebRequest 对象,并 post 发送到这个地址。
另一个问题是我不确定 post 值,因为输入只有 ID 而没有名称:
<input name="ctl00$MainContent$txtSearchName" type="text" maxlength="8" id="MainContent_txtSearchName" class="input-large input-upper">
所以我读到了:c# - programmatically form fill and submit login,除此之外,我的代码如下所示:
var httpRequest = WebRequest.Create("https://www.foobar.com/");
var values = "SearchName=Foo&SearchLastName=Bar";
byte[] send = Encoding.Default.GetBytes(values);
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.ContentLength = send.Length;
Stream sout = httpRequest.GetRequestStream();
sout.Write(send, 0, send.Length);
sout.Flush();
sout.Close();
WebResponse res = httpRequest.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string returnvalue = sr.ReadToEnd();
File.WriteAllText(@"C:\src\test.html", returnvalue);
但是,创建的结果 html 页面不显示搜索结果,它显示初始搜索表单。
我假设 post 失败了。我的问题围绕post我正在制作。
action="./" 是否意味着它 post 返回同一页面?
我是否需要提交所有表单值(或者我可以只提交一个或两个就可以了)?
有什么方法可以从表单中推断出正确的 post 参数名称吗?
或者我是否完全遗漏了一些关于在服务器端代码中进行网络抓取和提交表单的内容?
我的建议是不要手动完成所有这些工作,而是让您的计算机承担一些工作量。您可以使用 Fiddler and the Fiddler Request To Code Plugin 等工具以编程方式生成用于复制 Web 请求的 C# 代码。然后您可以修改它以获取您可能需要的任何动态输入。
如果这不是您想要采用的路线,您应该确保您使用正确的 cookie 请求此数据(如果适用)并且您提供 ALL POST 数据,无论它看起来多么微不足道。
我正在尝试从 C# 中的简单表单中抓取一些网页。
我的问题是试图找出对 post 的操作以及如何计算 post 参数。
我尝试提交的表格有:
<form method="post" action="./"
因为页面位于 www.foobar.com,所以我在我的 C# 代码中创建了一个 WebRequest 对象,并 post 发送到这个地址。
另一个问题是我不确定 post 值,因为输入只有 ID 而没有名称:
<input name="ctl00$MainContent$txtSearchName" type="text" maxlength="8" id="MainContent_txtSearchName" class="input-large input-upper">
所以我读到了:c# - programmatically form fill and submit login,除此之外,我的代码如下所示:
var httpRequest = WebRequest.Create("https://www.foobar.com/");
var values = "SearchName=Foo&SearchLastName=Bar";
byte[] send = Encoding.Default.GetBytes(values);
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.ContentLength = send.Length;
Stream sout = httpRequest.GetRequestStream();
sout.Write(send, 0, send.Length);
sout.Flush();
sout.Close();
WebResponse res = httpRequest.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string returnvalue = sr.ReadToEnd();
File.WriteAllText(@"C:\src\test.html", returnvalue);
但是,创建的结果 html 页面不显示搜索结果,它显示初始搜索表单。
我假设 post 失败了。我的问题围绕post我正在制作。
action="./" 是否意味着它 post 返回同一页面?
我是否需要提交所有表单值(或者我可以只提交一个或两个就可以了)?
有什么方法可以从表单中推断出正确的 post 参数名称吗?
或者我是否完全遗漏了一些关于在服务器端代码中进行网络抓取和提交表单的内容?
我的建议是不要手动完成所有这些工作,而是让您的计算机承担一些工作量。您可以使用 Fiddler and the Fiddler Request To Code Plugin 等工具以编程方式生成用于复制 Web 请求的 C# 代码。然后您可以修改它以获取您可能需要的任何动态输入。
如果这不是您想要采用的路线,您应该确保您使用正确的 cookie 请求此数据(如果适用)并且您提供 ALL POST 数据,无论它看起来多么微不足道。