Python爬虫之一 PySpider 抓取淘宝MM的个人信息和图片

news/2024/7/19 10:33:44 标签: 爬虫, python, json

ySpider 是一个非常方便并且功能强大的爬虫框架,支持多线程爬取、JS动态解析,提供了可操作界面、出错重试、定时爬取等等的功能,使用非常人性化。

本篇通过做一个PySpider 项目,来理解 PySpider 的运行流程。

PySpider具体安装参照:http://www.cnblogs.com/shaosks/p/6840039.html

本篇目标

1.抓取淘宝MM的姓名,头像,年龄

2.抓取每一个MM的资料简介以及写真图片

3.把每一个MM的写真图片按照文件夹保存到本地

4.熟悉文件保存的过程

1.URL的格式

在这里我们用到的URL是 http://mm.taobao.com/json/request_top_list.htm?page=1,问号前面是基地址,后面的参数page是代表第几页,可以随意更换地址。点击开之后,会发现有一些淘宝MM的简介,并附有超链接链接到个人详情页面。

我们需要抓取本页面的头像地址,MM姓名,MM年龄,MM居住地,以及MM的个人详情页面地址。

2.抓取过程

  1、首先在命令行下运行pyspider all命令:

  

  2、接下来在浏览器中输入 http://localhost:5000,可以看到 PySpider 的主界面,点击右下角的 Create,命名为 spider_taobaomm,当然名称你可以随意取,继续点击 Create。

   

 

   

 

  接着修改代码。

  依然是上一节的那个网址,https://mm.taobao.com/json/request_top_list.htm?page=1,其中 page 参数代表页码。所以我们暂时抓取前 5 页。页码到最后可以随意调整。

首先我们定义基地址,然后定义爬取的页码和总页码。

  代码如下:

 1 #!/usr/bin/env python
 2 # -*- encoding: utf-8 -*-
 3 # Created on 2017-05-16 13:57:04
 4 # Project: spider_taobaomm
 5 
 6 from pyspider.libs.base_handler import *
 7 
 8 
 9 class Handler(BaseHandler):
10     crawl_config = {
11     }
12     def __init__(self):
13         self.base_url = 'https://mm.taobao.com/json/request_top_list.htm?page='
14         self.page_num = 1
15         self.total_num = 5
16         
17     @every(minutes=24 * 60)
18     def on_start(self):
19         while self.page_num <= self.total_num:
20             url = self.base_url + str(self.page_num)
21             self.crawl(url, callback=self.index_page)
22             self.page_num += 1
23 
24     @config(age=10 * 24 * 60 * 60)
25     def index_page(self, response):
26         for each in response.doc('a[href^="http"]').items():
27             self.crawl(each.attr.href, callback=self.detail_page)
28 
29     @config(priority=2)
30     def detail_page(self, response):
31         return {
32             "url": response.url,
33             "title": response.doc('title').text(),
34         }

   点击保存按钮保存代码:

  

  点击“run"按钮

  

  这样就找到5条记录,点击“follows”

  

 

  选择一条记录,点击右边的三角按钮

 

  

 

  出现错误如下:

  

  针对这个错误,参照:http://www.cnblogs.com/shaosks/p/6856086.html

  实际上就是在on_start方法的self.crawl里面增加,validate_cert=False

  

  

  然后保存代码再重新执行,成功

  

  点击之后,再查看下方的 web 页面,可以预览实时页面,这个页面被我们爬取了下来,并且回调到 index_page 函数来处理,

  目前 index_page 函数我们还没有处理,所以是继续构建了所有的链接请求。

  

  

  点击下面的html出现:

  

  爬取到了 MM 的列表,接下来就要进入到 MM 详情页了,修改 index_page 方法。

  

  我们继续点击 run 按钮,开始下一个页面的爬取。得到的结果是这样的。

  

  

  有些页面没有加载出来,这是为什么?这个页面比较特殊,右边的页面使用 JS 渲染生成的,而普通的抓取是不能得到 JS 渲染后的页面的,幸运的是,PySpider 提供了动态解析 JS 的机制。

  这时要用到PhantomJS了。在最开始运行 PySpider 的时候,使用了pyspider all命令,这个命令是把 PySpider 所有的组件启动起来,其中也包括 PhantomJS。

  所以修改代码如下:

@config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
         for each in response.doc('.lady-name').items():
            self.crawl(each.attr.href, callback=self.detail_page,fetch_type='js',validate_cert=False)

  保存代码,重新运行,结果如下:

  

  

  好,继续修改 detail_page 方法,然后增加一个 domain_page 方法,用来处理每个 MM 的个性域名。

 


http://www.niftyadmin.cn/n/634210.html

相关文章

Instant Neural Graphics Primitives with a Multiresolution HashEncoding_具有多分辨率的哈希编码

Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 如何评价 NVIDIA 最新技术 5 秒训练 NERF&#xff1f; Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 痛点&#xff1a;完全连接的神经网络的参数训练和评估的成本都很…

Autodesk View and Data API二次开发学习指南

什么是View and Data API&#xff1f; 使用View and Data API&#xff0c;你可以轻松的在网页上显示大型三维模型或者二维图纸而不需要安装任何插件。通过View and Data API&#xff0c;你可以对模型进行视点控制、选择控制、属性信息查询等等&#xff0c;而且还可以把这样无插…

最全ubuntu-Anaconda换源问题/恢复默认源,一篇就够

万恶的换源操作&#xff0c;acaconda突然下载变慢了&#xff0c;以为是源的问题&#xff0c;一不小心就把源换了&#xff0c;后来&#xff0c;排查发现是网速没跟上&#xff0c;而各种换源方式都尝试了一波&#xff0c;发现源依旧报各种错误&#xff0c;如&#xff1a; 总之&am…

详细介绍Base64的编码转换方式

下面&#xff0c;详细介绍Base64的编码转换方式。 所谓Base64&#xff0c;就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号""、"/"&#xff08;再加上作为垫字的""&#xff0c;实际上是65个字符&#xff09;----作为一个基本字符…

[转载]undefined reference to __udivdi3

(转载注&#xff1a;这篇文章对于我有很大的帮助&#xff0c;只看了一半就把目前手上的内核线程的问题解决了&#xff0c;而这个问题之前并没有找到合适的解决方法) 原文地址:http://yijunzhu.diandian.com/?tag%E5%86%85%E6%A0%B8 【问题】 编译Linux下面的代码&#xff0c;经…

Tips for Writing a Good Report-一份好的报告的关键点

目录 Title&#xff1a;标题 Introduction&#xff1a;介绍 Methods:方法 Results&#xff1a;结果 Discussion&#xff1a;讨论 References&#xff1a;参考 Final Comment&#xff1a;最后的评价 Title&#xff1a;标题 清晰的、描述性的&#xff0c;但不要太长。理想…

ubuntu报错:RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted.

RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted. 原因2类&#xff1a; torchvision的模型下载失败不知什么时候下载中断了&#xff0c;导致下载的预训练模型错误&#xff0c;需要删除&#xff1a; /home//.cache/torch/hub/check…

Supervised learning/ Unsupervised learning监督学习/无监督学习

[机器学习]两种方法——监督学习和无监督学习&#xff08;通俗理解&#xff09; [机器学习] : 监督学习 (框架) 有监督学习与无监督学习的几大区别 目录 Supervised learning 监督学习 Unsupervised learning 无监督学习 Supervised learning 监督学习 VS Unsupervised l…