scrapy实战(一)--知乎问答

文章目录

  • 知乎问答
    • 创建项目
    • 项目配置
    • 模拟登入

知乎问答

使用scrapy框架 mysql存储数据
爬取网页 https://www.zhihu.com/

创建项目

  1. 创建项目虚拟环境
mkvirtualenv spider --python=python3
  1. 安装scrapy
pip install -i https://pypi.douban.com/simple/ scrapy

由于此下载依赖包很多,如出现某个包下载出错,重复执行该命令即可。

  1. 创建项目
scrapy startproject spider_task
  1. 创建爬虫
cd spider_task
scrapy genspider zhihu zhihu.com
  1. 通过pycharm打开刚才创建的项目

  2. 导入新创建的虚拟环境

  3. 测试是否创建成功
    启动爬虫,在命令行中输入

scrapy crawl zhihu

如果出现 no module named ‘win32api’ 执行

pip install -i https://pypi.douban.com/simple/ pypiwin32

启动成功
scrapy实战(一)--知乎问答_第1张图片

项目配置

  • 新建main函数
    在pycharm项目中添加main函数代替命令行执行启动爬虫操作,方便断点测试.
from scrapy.cmdline import execute

import os
import sys

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy","crawl","zhihu"])
  • 修改settings.py文件
    ROBOTSTXT_OBEY = False

模拟登入

安装selenium和chromdriver

  • 安装selenium
pip install selenium
  • 根据chrome浏览器 下载相应版本的chromedriver
  • 可通过点击谷歌浏览器『帮助』选择 『关于 google chrome』查看当前版本
    有两个下载地址:

http://chromedriver.storage.googleapis.com/index.html

https://npm.taobao.org/mirrors/chromedriver/

模拟登入代码
最新的知乎已经可以检测是否使用selenium
所以本阶段采用手动开启chrom debug模式避开检测

  • terminal中启动:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
  • 修改代码
# -*- coding: utf-8 -*-
import scrapy
import time


from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

from SpiderTask.utils import common

passwd = common.decrypt(b'c82b377c2a556ac25c38e35783769612')


class ZhihuSpider(scrapy.Spider):
    name = 'zhihu'
    allowed_domains = ['www.zhihu.com/']
    start_urls = ['http://www.zhihu.com/']



    def start_requests(self):

        chrome_option = Options()
        chrome_option.add_argument("--disable-extensions")
        chrome_option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

        browser = webdriver.Chrome(executable_path='/Applications/chromedriver',chrome_options=chrome_option)
        browser.get('https://www.zhihu.com/signin')
        browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/div[1]/div[2]').click()
        browser.find_element_by_xpath(
            '//*[@id="root"]/div/main/div/div/div[1]/div/form/div[2]/div[2]/div[1]/input').send_keys(Keys.CONTROL + "a")
        browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/div[2]/div[2]/div[1]/input').send_keys("15872152010")
        browser.find_element_by_xpath(
            '//*[@id="root"]/div/main/div/div/div[1]/div/form/div[3]/div/div[1]/input').send_keys(Keys.CONTROL + "a")
        browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div[1]/div/form/div[3]/div/div[1]/input').send_keys(passwd)
        browser.find_element_by_xpath('//button[@class="Button SignFlow-submitButton Button--primary Button--blue"]').click()

        time.sleep(60)

测试是否通过selenium填写表单

你可能感兴趣的:(数据挖掘)