python scrapy 爬虫 初学

环境

python3.6.1

scrapy

安装

pip3 install scrapy

新建项目(比如爬 豆瓣)

scrapy startproject douban

代码结构

python scrapy 爬虫 初学

新建spider 爬虫主文件

spider 目录 scrapy genspider douban_spider movie.douban.com

然后看看主要代码

spiders 目录下 douban_spider.py 文件

-*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem

class DoubanSpiderSpider(scrapy.Spider):
    #爬虫名
    name = 'douban_spider'
    allowed_domains = ['movie.douban.com']
    start_urls = ['http://movie.douban.com/top250']

    def parse(self, response):
        print(response.text)
        movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
        for i_ietm in movie_list:
            douban_item = DoubanItem()
            douban_item['serial_number'] = i_ietm.xpath(".//div[@class='item']//em/text()").extract_first()
            douban_item['movie_name'] = i_ietm.xpath(".//div[@class='item']//div[@class='info']/div/a/span[1]/text()").extract_first()
            content = i_ietm.xpath(".//div[@class='item']//div[@class='info']/div[@class='bd']/p[1]/text()").extract_first()
            #for i_content in content:
            douban_item['introduce'] = content
            douban_item['star'] = i_ietm.xpath(".//div[@class='item']//div[@class='info']/div[@class='bd']/div[@class='star']/span[2]/text()").extract_first()
            douban_item['evaluate'] = i_ietm.xpath(".//div[@class='item']//div[@class='info']/div[@class='bd']/div[@class='star']/span[4]/text()").extract_first()
            douban_item['describe'] = i_ietm.xpath(".//div[@class='item']//div[@class='info']/div[@class='bd']/p[@class='quote']/span/text()").extract_first()
            print(douban_item)
            if douban_item:
                yield douban_item
        next_link = response.xpath("//div[@class='paginator']//span[@class='next']/a/@href").extract_first()

        if next_link:
            #next_link = next_link[0]
            print('---', next_link)
            yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)

主体代码已经写完了

然后在看看配置 , 这个是为了防止目标网站 拦截

settings.py 这个文件

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
SPIDER_MIDDLEWARES = {
   #'douban.middlewares.DoubanSpiderMiddleware': 543,
    'douban.middlewares.my_useragent': 543,
}
my_useragent 这个配置是设置自定义的 useragent
需要自己写一个类  在 middlewares.py 文件里面

python scrapy 爬虫 初学

class my_useragent(object):
    def process_request(self, request, splider):
        USER_AGENT_LIST = [
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
            "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
            "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
            "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
            "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
            "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
            "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
            "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
            "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
            "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
            "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
            "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
            "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
            "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
        ]
        agent = random.choice(USER_AGENT_LIST)
        request.headers['User-Agent'] = agent

然后 一次执行 main,py 和 执行命令

scrapy crawl douban_spider -o test.json (这个是下载器数据)

Original: https://blog.csdn.net/u010179404/article/details/115999883
Author: 南吧
Title: python scrapy 爬虫 初学

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/792432/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python笔记

    Roc-Python笔记 类型转换 np专区 Torch专区 * tensor升维和降维 tensor拼接与拆分 高斯噪声 * 敏感度 求范数 FedAVG – add…

    Python 2023年8月27日
    043
  • Pandas基本用法(详细2.0)

    Pandas 是 Python 语言的一个扩展程序库,用于数据分析。 Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。 Pandas …

    Python 2023年8月18日
    047
  • 注册ChatGPT保姆级攻略

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月3日
    023
  • plt.scatter()详解

    plt.scatter() 一般在代码中会以下列方式导入库:import matplotlib.pyplot as plt 函数的原型:matplotlib.pyplot.scat…

    Python 2023年8月26日
    060
  • Unity打包WebGL平台如何区别移动端和电脑端

    Unity打包WebGL平台如何区别移动端和电脑端完整解决方案 前情提要 最近有一个项目,其中有一个功能来控制角色移动,电脑端是使用WASD(键盘)控制,手机移动端呢 使用虚拟摇杆…

    Python 2023年9月29日
    036
  • Flask send_file函数导致的绝对路径遍历

    平时接触到的 python 项目并不多,对 python 的代码审计更是没有接触,偶然朋友发来了一个漏洞 Flask send_file函&#x657…

    Python 2023年8月14日
    044
  • 【Python实现杨辉三角】

    目录 什么是杨辉三角 杨辉三角解法 1. 定义法 2. 计算杨辉三角 补0法 3. 杨辉三角,对称法 4. 杨辉三角,单列表方法 5.列表嵌套(二维数组) 6. 新旧两行,一次性开…

    Python 2023年7月31日
    071
  • [pandas]数据重塑与透视

    一.数据透视. 1.1整理透视 df.pivot(index = ‘ ‘, columns = ‘ ‘,values = ‘ ‘) 这些参数传入的是原数据的列名。index如果不传…

    Python 2023年8月8日
    048
  • Socket

    1.不同的协议在同一条网线上传递(传递的都是数据流) 1.send 发 2.receive 收2.OSI七层协议 应用层 表示层 会话层 传输层 网络层 ip 数据链路层 mac …

    Python 2023年6月3日
    082
  • 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 i.MXRT10xx系列MCU外接24MHz晶振的作用。 痞子衡之前写过一篇关于时钟引脚的文章 《i.MXRT1x…

    Python 2023年10月20日
    042
  • python数据可视化-matplotlib入门(5)-饼图和堆叠图

    饼图常用于统计学模块,画饼图用到的方法为:pie( ) 一、pie()函数用来绘制饼图 pie(x, explode=None, labels=None, colors=None,…

    Python 2023年5月24日
    079
  • Vue3——vuex的使用——axios网络请求的使用

    vuex作用:用来集中式管理数据 集中式的应用,当前有四个组件A,B,C,D,假如现在有一个数据x在A里面,现在其他三个组件都要用到x并且好要修改x的时候,有一种方法就要用到全局事…

    Python 2023年9月16日
    034
  • label studio导出CoNLL格式后处理数据

    一、label studio使用 最近在做命名实体识别的东西,需要进行数据标注,一开始用的doccano。doccano的启动需要开启两个终端,一个是打开webserver的端口,…

    Python 2023年10月26日
    040
  • 良心之作,7 个值得收藏的 GitHub 开源项目!

    ‍ ‍‍ ‍公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 大家好,我是小 G。 今天来简单盘点…

    Python 2023年9月16日
    053
  • 【Linux】顶级编辑器Vim的基本使用及配置

    ### 回答1: Linux_中 _使用 vim编辑器_的方法如下: 1. 打开终端,输入 _vim_命令,进入 _vim编辑器。 2. 在 vim编辑器_中,可以 _使用_以下命…

    Python 2023年11月5日
    047
  • Django数据库——objects

    文章目录 * – objects – QuerySet方法 objects 我们之前的增删改查操作等都会写类似如下的语句(xxx代表着filter,get等…

    Python 2023年8月5日
    056
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球