我是新手Web Crawling
,我正在使用HttpWebRequest
从网站抓取数据。
到目前为止,我已经成功地从我的 wordpress 网站抓取并获取数据。该数据是一个简单的用户配置文件数据。(如姓名、电子邮件、AIM id 等...)
现在作为一个练习,我想爬取维基百科,我将使用最后输入到文本框中的值进行搜索,然后使用搜索值爬取维基百科并从搜索中获取适当的标题。
现在我有以下疑问/困难。
首先,这甚至可能吗?我听说 wiki 有 robots.txt 设置来阻止这个。虽然我只从朋友那里听说过,因此不确定。
我正在使用我之前使用的相同程序,但我没有得到所需的结果。
谢谢 !
更新: 经过@svick的一些解释和帮助,我尝试了下面的代码,但仍然无法获得任何值(参见最后一行代码,我期待搜索结果页面的 html 标记)
string searchUrl = "http://en.wikipedia.org/w/index.php?search=Wikipedia&title=Special%3ASearch";
var postData = new StringBuilder();
postData.Append("search=" + model.Query);
postData.Append("&");
postData.Append("title" + "Special:Search");
byte[] data2 = Crawler.GetEncodedData(postData.ToString());
var webRequest = (HttpWebRequest)WebRequest.Create(searchUrl);
webRequest.Method = "POST";
webRequest.UserAgent = "Crawling HW (http://yassershaikh.com/contact-me/)";
webRequest.AllowAutoRedirect = false;
ServicePointManager.Expect100Continue = false;
Stream requestStream = webRequest.GetRequestStream();
requestStream.Write(data2, 0, data2.Length);
requestStream.Close();
var responseCsv = (HttpWebResponse)webRequest.GetResponse();
Stream response = responseCsv.GetResponseStream();
// Todo Parsing
var streamReader = new StreamReader(response);
string val = streamReader.ReadToEnd();
// val is empty !! <-- this is my problem !
这是我的GetEncodedData
方法定义。
public static byte[] GetEncodedData(string postData)
{
var encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postData);
return data;
}
请帮助我。