zoukankan      html  css  js  c++  java
  • 爬取任意两个用户在豆瓣上标记的想读的图书信息的交集

    一.实验背景

    爬取豆瓣上任意两个用户标记的想读的图书信息的交集。

    二.爬虫的步骤

    首先获取目标用户在豆瓣上标记的想读的图书的首页的url,见下图。

    将要爬取的目标用户想读的图书的首页的url存储在元组中。通过urllib.request方法构造一个发送请求,在通过urllib.urlopen方法发出请求并取得响应(response)。通过response.read得到页面html,然后在通过beautifulsoup将html解析成beautiful结构soup。通过soup中的一系列方法得到每本图书的url存到set中,将此url和其余的信息存到一个dict中。

    通过判断在当前页是否还有下一页存在(通过页面的标识寻找),如果存在就继续遍历,直至结束。然后通过set中的”与“运算符得到共同想读的书的url,存储在一个新的set中,如果此set的元素的长度为0,则说明两人没有共同想读的图书,如果不为0,则遍历这些url,然后在dict中找到与之对应的图书的具体信息。然后通过xlwt将图书的信息写在excel中保存。

    上图是我在豆瓣上标记的一本图书的具体信息。

    在构造请求时遇到了发起请求后,服务器返回403。它表示服务器理解了客户的请求,但拒绝处理它。解决的办法是在请求的头部添加refer,refer来自通过浏览器访问目标页面时,通过f12在浏览器中找到的。其目的是模拟通过浏览器访问目标页面来爬取数据。有时候在爬取页面的信息时,需要暂停几毫秒,爬的过于频繁,会被服务器端监测到。

    三.运行结果

    上图是程序运行后生成的excel文件,其中包括标题,作者,出版社等信息。

    四.爬虫原理图

     在我的程序中,首先将用户标记的图书的首页作为种子url,然后将此url作为参数向豆瓣服务器发起请求,返回首页的网页,从中获取此页所有的图书信息,再从此网页中解析出待抓取的url,继续将待抓取的url作为参数发起请求,重复上述步骤,遍历到最后一个待抓取的url(最后一页的url)终止。

    代码已上传至github,github地址:https://github.com/041240515lq/python_spider

  • 相关阅读:
    [翻译]ASP.NET MVC 3 开发的20个秘诀(六)[20 Recipes for Programming MVC 3]:找回忘记的密码
    No.9425 [翻译]开发之前设计先行
    [翻译]ASP.NET MVC 3 开发的20个秘诀(五)[20 Recipes for Programming MVC 3]:发送欢迎邮件
    内联(inline)函数与虚函数(virtual)的讨论
    内联函数、模板、头文件杂记(转)
    gdb使用整理
    data structure and algorithm analysis上一点摘录
    lsof by example 例子
    linux core文件机制
    转一篇shared_ptr的小文
  • 原文地址:https://www.cnblogs.com/liquan/p/9020042.html
Copyright © 2011-2022 走看看