输入关键字 抓取所有网页(Python的urllib库中的如下链接(包括GET参数的方法))

优采云 发布时间: 2022-03-31 18:19

  输入关键字 抓取所有网页(Python的urllib库中的如下链接(包括GET参数的方法))

  一开始也没多想,因为GET参数和POST不一样。GET参数是直接加在URL后面直接发送的,所以我觉得直接在要抓取的URL中写GET参数就够了,像这样:

  这是通过关键字-aaaa在和讯论坛搜索文本的URL链接地址(包括GET参数)。获取这个地址最简单的方法是通过浏览器访问这个博客的地址,然后在搜索输入框中输入要搜索的关键字,选择搜索类型为文本,然后点击搜索,浏览器会弹出网页的地址栏。这是我们上面的地址,如下图所示:

  

  

  如果有人想深究,想知道上面地址中关键字q、type、Submit的含义,只能看网页源码(需要学爬虫或者知道html的语法):

  说这么多好像有点跑题了。上面提到 GET 参数是写在 URL 中的。比如上面的链接地址可以直接通过Scrapy shell访问验证,如下:

  一定要注意链接地址一定要用引号引起来,否则会报错

  上面可以进入Scrapy交互模式的命令行说明是可行的。

  2、URL中文编码问题

  通过上面的问题1,我确认了可以在URL中硬编码GET参数来访问,但是我们要搜索的关键字是Chinese-Hongling,这就不得不涉及到中文的编解码问题。

  Python 的 urllib 库中以下两个函数可以满足 URL 编解码的要求:

  还要注意网站的编码。一开始没注意网站的编码。挣扎了半天,在网页的源终端文件中发现编码是gb2312。

  最后通过上面两句就可以实现了,比上面直接访问灵活多了。也可以修改Scrapy的参数形式,将要搜索的关键字作为参数传入。

  3、被robots.txt禁止的问题

  刚开始爬的时候,总是有以下信息:

  显然爬虫应该被拒绝。我对比了HttpFox和wireshark发送的数据包,发现我的爬虫发送的数据包和浏览器发送的数据包基本一致。我还使用了 scrapy-fake-useragent 库来伪装用户代理字段。, 逻辑上不会受到限制。

  后来google了一下,发现有robots协议。以下段落摘自百度词条:

  Robots Protocol(也称Crawler Protocol、Robot Protocol等)的全称是“Robots Exclusion Protocol”。网站 通过 Robots Protocol 告诉搜索引擎哪些页面可以爬取,哪些页面不能爬取。

  后来在Scrapy文档中发现有对robots协议的控制的支持。

  这里没有翻译,可以自己查看官方文档——RobotsTxtMiddleware

  三、总结

  整个实现过程比较简单。一开始,我被搜索结果的数量吓到了,因为有几十页,然后每页都有几十篇文章。在后续的实现中,发现只使用了Scrapy抓取的内容。没错,内容多少无关紧要,只是爬虫运行多长时间的问题。最后把整个代码放到网上——通过Scrapy和新闻论坛关键词搜索的结果。如果你有兴趣,你可以下载它并讨论它。欢迎来到拍砖!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线