Python网络爬虫2 – 请求中遇到的几个问题

这次尝试下怎样搜索电影并解析出磁力链接信息。

搜索的网址是:https://www.torrentkitty.tv/search/

开始了!

使用FireFox打开上面的网址,输入要搜索的电影。在点击搜索按钮前记得打开FireBug,并激活“网络”页签。

查看了请求的详情有些哭笑不得:点击搜索按钮后网页跳转到了这样的地址:https://www.torrentkitty.tv/search/蝙蝠侠/——很明显的REST风格的请求。这样,我们要搜什么内容直接将要搜索的内容拼装到请求地址中就行了。搜索的代码是这样的:

执行后报错了,报错信息如下:

根据错误栈信息可以看出是在发送http请求时报错的,是因为编码导致的错误。在python中使用中文经常会遇到这样的问题。因为是在http请求中出现的中文编码异常,所以可以考虑使用urlencode加密。

在python中对字符串进行urlencode使用的是parse库的quote方法,而非是urlencode方法:

再次执行请求,依然报错了:

报的是HTTP 403错误。这样的错误我遇到过几次,一般是因为没有设置UserAgnet,是网站屏蔽爬虫抓取的一种方式。通过FireBug可以从headers中获取到User-Agent信息:

image

获取到header信息后再调整下我们的代码,这次会需要使用一个新的类Request:

修改后依然在报错:

请求超时了,估计是因为网站在境外的缘故。所以还需要设置一个请求超时时间,只需要添加一个参数:

这样调整后终于请求成功了。需要强调下,这里的超时设置的时间单位是秒。

总结下吧,这次一共遇到了三个问题:

  1. 中文编码的问题;
  2. HTTP403错误的问题;
  3. 请求超时时间设置的问题。

完整的代码在这里,稍稍作了些调整,还添加了post请求的代码。在pot请求的代码中对字典型的参数调用了urlencode方法:

就是这样。这次本来是想说些关于网页解析的内容的,不过后来发现还是有很多的内容需要先说明下才好进行下去。关于网页解析的内容就挪到了下一节。

这里有篇文章不错,说明了urllib中几个常见的问题:http://www.cnblogs.com/ifso/p/4707135.html

##########

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据