我正在尝试抓取类似http://cmispub.cicpa.org.cn/cicpa2_web/07/0000010F849E5F5C9F672D8232D275F4.shtml的页面。每个页面都包含有关个人的某些信息。
有两种方法可以访问这些页面。
一种是创建他们的网址,这就是我在我的草率代码中使用的网址。我有ascGuid=&isStock=00&method=indexQuery&offName=&pageNum=&pageSize=&perCode=110001670258&perName=&queryType=2
至http://cmispub.cicpa.org.cn/cicpa2_web/public/query0/2/00.shtml之类的草率的帖子请求正文。
这些帖子将返回响应,在这里我可以使用xpath和regex查找类似'0000010F849E5F5C9F672D8232D275F4'
的字符串来添加我真正想要的网址:
next_url_part1 = 'http://cmispub.cicpa.org.cn/cicpa2_web/07/'
next_url_part2 = some xptah and regex...
next_url_part3 = '.shtml'
next_url_list.append([''.join([next_url_part1, i, next_url_part3]))
最后,scrapy向这些硬币链接发送了GET请求,并下载了我想要的信息。
由于我想要的页面是有关不同个人的信息,因此我可以将那些POST请求正文中的perCode=
部分更改为不同人的相应网址。
但是这种方法有时无法解决。我已经将GET请求发送到了我创造的大约100,000个网址,并且得到了5404个响应。为了弄清楚发生了什么并获取我想要的信息,我首先将这些失败的URL粘贴到浏览器中,而不是让我惊讶的是我仍然得到404。因此,我尝试了另一种方法来处理这些404 URL。
另一种方法是像真实人物一样在浏览器中手动访问这些页面。由于我想要的页面是有关不同个人的信息,因此我可以在此页面http://cmispub.cicpa.org.cn/cicpa2_web/public/query0/2/00.shtml(仅在IE下正常工作)的左下空白中写下他们的个人代码,然后单击右下角的橙色搜索按钮(我认为这与发送POST请求一样令人费解。然后,将出现一个表格,通过单击最右边的蓝色单词(该人的名字),我终于可以访问这些页面。
让我感到困惑的是,在我尝试了第二种方法处理那些失败的URL并获得所需的内容后,当我以第一种方法重试它们时,这些以前的404 URL将返回200(为避免Cookie的影响,我同时尝试了两种方法scrapy shell和浏览器的inPrivate模式)。然后,我比较了200和404响应的GET请求标头,它们看起来相同。我不明白这里发生了什么。你能帮我吗?
以下是我没有尝试过第二种方法的其余失败的URL,因此它们仍然返回404(如果您得到200,则也许其他人已经尝试了第二种方法的URL):
http://cmispub.cicpa.org.cn/cicpa2_web/07/7694866B620EB530144034FC5FE04783.shtml
这个人的个人密码是
110001670258
http://cmispub.cicpa.org.cn/cicpa2_web/07/C003D8B431A5D6D353D8E7E231843868.shtml
这个人的个人密码是
110101301633
http://cmispub.cicpa.org.cn/cicpa2_web/07/B8960E3C85AFCF79BF0823A9D8BCABCC.shtml
并且此人的个人密码为110101480523
http://cmispub.cicpa.org.cn/cicpa2_web/07/8B51A9A73684ADF200A38A5D492A1FEA.shtml
并且此人的个人密码为110101500315