Scrapy分布式爬虫打造搜索引擎(慕课网)--爬取知乎(二)

通过Scrapy模拟登陆知乎

通过命令让系统自动新建zhihu.py文件

  • 首先进入工程目录下

  • 再进入虚拟环境

  • 通过genspider命令新建zhihu.py
scrapy genspider zhihu www.zhihu.com

  • 新建main.py文件,使得程序可以调试
 1 #coding:utf-8
 2
 3 from scrapy.cmdline import execute  #调用这个函数可以执行scrapy的脚本
 4
 5 import sys
 6 import os
 7 #获取当前路径os模块的abspath
 8 os.path.abspath(__file__)#获取当前py文件即mainpy文件的路径
 9 #父目录dirname
10 sys.path.append(os.path.dirname(os.path.abspath(__file__)))
11 #调用execute函数执行scrapy命令
12 execute(["scrapy","crawl","zhihu"])
  • 在运行main.py调试之前,需要设置setting.py的文件内容(设置不遵循ROBO协议,防止很多url被过滤)
ROBOTSTXT_OBEY = False
  • 注:match默认只匹配一行,故添加re.DOTALL使其匹配所有参数:
match_obj = re.match(‘.*name="_xsrf" value="(.*?)"‘, response.text, re.DOTALL)
  • 最终zhihu.py文件代码:
 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 import re
 4 import json
 5
 6 class ZhihuSpider(scrapy.Spider):
 7     name = ‘zhihu‘
 8     allowed_domains = [‘www.zhihu.com‘]
 9     start_urls = [‘http://www.zhihu.com/‘]
10
11     headers = {
12         "HOST": "www.zhihu.com",
13         "Referer": "https://www.zhihu.com",
14         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0"
15     }
16
17     def parse(self, response):
18         pass
19
20     def start_requests(self):
21         return [scrapy.Request(‘https://www.zhihu.com/signup?next=%2F‘, callback=self.login, headers=self.headers)]
22
23     def login(self, response):
24         response_text = response.text
25         match_obj = re.match(‘.*name="_xsrf" value="(.*?)"‘, response.text, re.DOTALL)
26         xsrf = ‘‘
27         if match_obj:
28             print (match_obj.group(1))
29         else:
30             return ""
31
32         if xsrf:
33             post_url = "https://www.zhihu.com/signup?next=%2F"
34             post_data = {
35                 "_xsrf": xsrf,
36                 "phone_num": "15603367590",
37                 "password":"0019wan,.WEI3618"
38             }
39
40             return [scrapy.FormRequest(
41                 url = post_url,
42                 formdata = post_data,
43                 headers = self.headers,
44                 callback = self.check_login  #传递的是函数名称,不加括号,加括号会被调用
45             )]
46
47     def check_login(self, response):
48         #验证服务器返回数据判断是否成功
49         text_jason = json.loads(response.text)
50         if "msg" in text_jason and text_jason["msg"] == "登陆成功":
51             for url in self.start_urls:
52                 yield self.make_requests_from_url(url, dont_filter = True, headers = self.headers)
 

原文地址:https://www.cnblogs.com/chimuyhs/p/8324101.html

时间: 2024-07-29 03:25:48

Scrapy分布式爬虫打造搜索引擎(慕课网)--爬取知乎(二)的相关文章

Scrapy分布式爬虫打造搜索引擎- (二)伯乐在线爬取所有文章

二.伯乐在线爬取所有文章 1. 初始化文件目录 基础环境 python 3.6.5 JetBrains PyCharm 2018.1 mysql+navicat 为了便于日后的部署:我们开发使用了虚拟环境. 1234567891011 pip install virtualenvpip install virtualenvwrapper-win安装虚拟环境管理mkvirtualenv articlespider3创建虚拟环境workon articlespider3直接进入虚拟环境deactiv

Scrapy分布式爬虫打造搜索引擎——(二) scrapy 爬取伯乐在线

1.开发环境准备 1.爬取策略 目标:爬取“伯乐在线”的所有文章 策略选择:由于“伯乐在线”提供了全部文章的索引页 ,所有不需要考虑url的去重方法,直接在索引页开始,一篇文章一篇文章地进行爬取,一直进行到最后一页即可. 索引页地址:http://blog.jobbole.com/all-posts/ 2. 搭建python3虚拟环境 打开cmd,进入命令行,输入workon,查看当前存在的虚拟环境:  workon 为爬虫项目,新建python3虚拟环境: mkvirtualenv -p py

Scrapy分布式爬虫打造搜索引擎 (一),开发环境安装

Technorati 标签: 分布式爬虫 Linux环境下安装mysql sudo apt-get install mysqlserver 然后可以查看是否启动 ps aux | grep mysqld 登录 mysql -uroot -proot ? 如何让虚拟机中的mysql被外界访问到. sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 里面的bind-address需要修改 可以把此监听地址改为0.0.0.0然后重启服务 sudo service m

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定.链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢.不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构.它可以通过一

python分布式爬虫打造搜索引擎--------scrapy实现

最近在网上学习一门关于scrapy爬虫的课程,觉得还不错,以下是目录还在更新中,我觉得有必要好好的做下笔记,研究研究. 第1章 课程介绍 1-1 python分布式爬虫打造搜索引擎简介 07:23 第2章 windows下搭建开发环境 2-1 pycharm的安装和简单使用 10:27 2-2 mysql和navicat的安装和使用 16:20 2-3 windows和linux下安装python2和python3 06:49 2-4 虚拟环境的安装和配置 30:53 第3章 爬虫基础知识回顾

第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行一个函数 dispatcher.connect()信号分发器,第一个参数信号触发函数,第二个参数是触发信号, signals.engine_started当Scrapy引擎启动爬取时发送该信号.该信号支持返回deferreds.signals.engine_stopped当Scrapy引擎停止时发送

第三百五十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启

第三百五十三节,Python分布式爬虫打造搜索引擎Scrapy精讲-scrapy的暂停与重启 scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 1.首先cd进入到scrapy项目里 2.在scrapy项目里创建保存记录信息的文件夹 3.执行命令: scrapy crawl 爬虫名称 -s JOBDIR=保存记录信息的路径 如:scrapy crawl cnblogs -s JOBDIR=zant/001

第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理

第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-深度优先与广度优先原理 网站树形结构 深度优先 是从左到右深度进行爬取的,以深度为准则从左到右的执行