day28-python-spider

day28-python-spider

python

爬取小说实战


# BeautifulSoup使用
import re

from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import requests

url='https://www.shicimingju.com/book/houhanyanyi.html'

ua=UserAgent()
headers={
    "User-Agent":ua.firefox
}

resp=requests.get(url=url,headers=headers)
resp.encoding="utf-8"
html=resp.text
soup=BeautifulSoup(html,"html.parser")

itemList=soup.find_all("div",class_="book-mulu")
itemLinkList=soup.select('.book-mulu>ul>li>a')
# 获取标题对应的内容
def getTitleContent(url,title):
    resp = requests.get(url=url, headers=headers)
    resp.encoding = "utf-8"
    html=resp.text
    soup=BeautifulSoup(html,"lxml")
    content=soup.find("div",class_="chapter_content").text
    # findContent=re.compile('<div class="chapter_content">(.*?)</div>',re.S)
    # content=re.findall(findContent,str(content))[0]
    # content=str(content).replace("<br/>","\n")
    print(content)
    with open("小说.text","a",encoding="utf-8") as f:
        f.write("\n"+title+"\n"+content)

for itemLink in itemLinkList:
    title=itemLink.text
    titleSrc="https://www.shicimingju.com"+itemLink["href"]
    getTitleContent(titleSrc,title)

Selenium

Selenium是一个用于测试Web应用程序的自动化测试工具,它直接运行在浏览器中,实现了对浏览器的自动化操作,它支持所有主流的浏览器,包括IE、Firefos、Safari、Chrome。

Selenium提供了一个工具集,包括Selenium WebDriver(浏览器驱动)、Selenium IDE(录制测试脚本)、Selenium Grid(执行测试脚本)。

实现自动爬虫
安装:
	pip install selenium

暂时跳过

Scrapy

scrapy是一个基于Twisted实现的一部处理爬虫框架,该框架使用纯Python语言编写。
Scrapy框架应用广泛,常用于数据采集、网络检测、以及自动化测试等。

Twisted是一个基于事件驱动的网络引擎框架,同样采用Python实现

下载安装Scrapy

pip install Scrapy

常用命令

命令 格式 说明
startproject scrapy startproject 项目 创建一个新项目
genspider scrapy genspider 爬虫文件名 域名 新建爬虫文件
runspider scrapy runspider 爬虫文件 运行一个爬虫文件,不需要创建项目
crawl scrapy crawl spidername 运行一个爬虫项目,必须要创建项目
list scrapy list 列出项目中所有爬虫文件
view scrapy view url地址 从浏览器中打开url地址
shell csrapy shell url地址 命令行交互模式
settings scrapy settings 查看当前项目的配置信息

创建一个爬虫项目

通过命令:scrapy startproject Baidu

Baidu                   # 项目文件夹
├── Baidu               # 用来装载项目文件的目录
│   ├── items.py        # 定义要抓取的数据结构
│   ├── __init__.py     # Python中package的标识,不能删除
│   ├── middlewares.py  # 中间件,用来设置一些处理规则
│   ├── pipelines.py    # 管道文件,处理抓取的数据
│   ├── settings.py     # 全局配置文件
│   └── spiders         # 用来装载爬虫文件的目录  
│       ├── baidu.py    # 具体的爬虫程序
└── scrapy.cfg          # 项目基本配置文件

Scrapy爬虫工作流程

Scrapy框架由五大组件构成

名称 作用说明
Engine(引擎) 整个Scrapy框架的核心,主要负责数据和信号在不同模块间传递
Scheduler(调度器) 用来维护引擎发送过来的request请求队列
Downloader(下载器) 接受引擎发送过来的response请求,主要用来解析、提取数据和获取需要跟进的二级url,然后将这些数据交回个引擎
Pipeline(项目管道) 实现数据存储,对引擎发送过来的数据进一步处理,如如存MySQL数据库等

在整个执行过程中,还涉及到两个middlewares中间件,分别是下载器中间件(Downloader Middlewares)和蜘蛛中间件(Spider Middlewares)

  • 下载中间件:位于引擎和下载器之间,主要用来包装request请求头,比如UserAgent、Cookies和代理IP
  • 蜘蛛中间件,位于引擎与爬虫文件之间,它主要用来修改响应对象的属性

Scrapy工作流程示意图如下所示:

当启动一个爬虫项目启动后,Scrapy框架回进行以下工作:

  1. 由 引擎 向爬虫文件索要第一个带爬取的URL,并将其交给调度器加入URL队列中(1/2步骤)
  2. 调度器处理完请求后,将第一个URL出队列返回给引擎;引擎经由下载器中间件将该URL交给下载器去下载response对象(3/4步骤)
  3. 下载器得到响应结果进行处理、分析,并提取出所需要的数据
  4. 最后,提取的数据会交给管道文件去存数据库,同时将需要继续跟进的二级页面URL交给调度器去入队列(7/8/9)
  5. 上述过程会一直循环,直到没有要爬取的URL为止,也就是URL队列空时才会停止。

settings配置文件

# 定义User-Agent
USER_AGENT='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'
# 是否遵循robots协议,一般设置为False
ROBOTSTXT_OBEY=False
# 最大并发量,默认为16
CONCURRENT_REQUESTS=32
# 下载延迟时间
DOWNLOAD_DELAY=1

其余常用配置项介绍

# 设置日志级别,DEBUG<INFO<WARNING<ERROR<CRITICAL
LOG_LEVEL=''
#将日志信息保存日志文件中,而不在终端输出
LOG_FILE=''
# 设置导出数据的编码格式(主要针对于json文件)
FEED_EXPORT_ENCODING=''
# 非结构化数据的存储路径
IMAGES_STORE='路径'
# 请求头,此处可以添加User-Agent、cookies、referer等
DEFAULT_REQUEST_HEADERS={}
# 项目管道,300 代表激活的优先级,越小越优先,取值1到1000
ITEM_PIPELINES={
    'Baidu.pipelines.BaiduPipeline':300
}
# 添加下载器中间件
DOWNLOADER_MIDDLEWARES={}

项目实战

在cmd命令行执行命令创建项目以及爬虫文件

# 创建项目
scrapy startproject Title
# 进入项目
cd Title
# 创建爬虫文件
scrapy genspider title c.biancheng.net
 创建一个爬虫文件名字为 title 域名为 c.biancheng.net,会自动生成一个模板文件

编辑title.py爬虫文件

import scrapy


class TitleSpider(scrapy.Spider):
    name = 'title' # 爬虫的名字
    allowed_domains = ['c.biancheng.net'] #要抓取网站的域名
    start_urls = ['http://c.biancheng.net/'] # 第一个抓取的url,初始url,被当作队列来处处理

    def parse(self, response):
        result=response.xpath('/html/head/title/text()').extract_first()
        print("华丽的分割线".center(30,"*"))
        print(result)
        print("华丽的分割线".center(30, "*"))
        pass

编辑settings.py配置文件

# 用户代理
USER_AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
# 是否遵守robot协议
ROBOTSTXT_OBEY=False
# 默认的请求头
DEFAULT_REQUEST_HEADERS={
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Language':'en'
}

编辑main.py运行爬虫的文件

from scrapy import cmdline

# 注意,cmdline.execute()是为了减少输入命令的操作,参数必须是列表

cmdline.execute('scrapy crawl title'.split())

执行的结果:

D:\developworkspace\python\51job\venv\Scripts\python.exe D:/developworkspace/python/51job/testScrapy/Title/Title/spiders/main.py
2022-04-15 19:39:30 [scrapy.utils.log] INFO: Scrapy 2.6.1 started (bot: Title)
2022-04-15 19:39:30 [scrapy.utils.log] INFO: Versions: lxml 4.8.0.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 22.2.0, Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 22.0.0 (OpenSSL 1.1.1n  15 Mar 2022), cryptography 36.0.2, Platform Windows-10-10.0.19044-SP0
2022-04-15 19:39:30 [scrapy.crawler] INFO: Overridden settings:
{'BOT_NAME': 'Title',
 'NEWSPIDER_MODULE': 'Title.spiders',
 'SPIDER_MODULES': ['Title.spiders'],
 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
               '(KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}
2022-04-15 19:39:30 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor
2022-04-15 19:39:30 [scrapy.extensions.telnet] INFO: Telnet Password: 18e41bf49c842aaf
2022-04-15 19:39:30 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.logstats.LogStats']
2022-04-15 19:39:31 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2022-04-15 19:39:31 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2022-04-15 19:39:31 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2022-04-15 19:39:31 [scrapy.core.engine] INFO: Spider opened
2022-04-15 19:39:33 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2022-04-15 19:39:33 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2022-04-15 19:39:33 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://c.biancheng.net/> (referer: None)
2022-04-15 19:39:33 [scrapy.core.engine] INFO: Closing spider (finished)
2022-04-15 19:39:33 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 369,
 'downloader/request_count': 1,
 'downloader/request_method_count/GET': 1,
 'downloader/response_bytes': 7476,
 'downloader/response_count': 1,
 'downloader/response_status_count/200': 1,
 'elapsed_time_seconds': 0.311814,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2022, 4, 15, 11, 39, 33, 479578),
 'httpcompression/response_bytes': 28389,
 'httpcompression/response_count': 1,
 'log_count/DEBUG': 2,
 'log_count/INFO': 10,
 'response_received_count': 1,
 'scheduler/dequeued': 1,
 'scheduler/dequeued/memory': 1,
 'scheduler/enqueued': 1,
 'scheduler/enqueued/memory': 1,
 'start_time': datetime.datetime(2022, 4, 15, 11, 39, 33, 167764)}
2022-04-15 19:39:33 [scrapy.core.engine] INFO: Spider closed (finished)
************华丽的分割线************
C语言中文网:C语言程序设计门户网站(入门教程、编程软件)
************华丽的分割线************

Process finished with exit code 0

抓取豆瓣电影Top100

通过终端的方式使用scrapy架构创建项目doubantop100

# 创建项目
scrapy startproject douban
# 进入项目
cd douban
# 创建爬虫文件doubantop250
# 必须是网站的域名
scrapy genspider doubantop250 movie.douban.com

创建main.py爬虫执行入口

from scrapy import cmdline

# 执行名字为top100Spider爬虫 并把数据保存到文件中
cmdline.execute('scrapy crawl doubantop250 -o top250.csv'.split())

items.py 定义数据结构

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

class Doubantop100Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name=scrapy.Field()
    star=scrapy.Field()
    rat=scrapy.Field()
    pass

top100Spider.py 爬虫项目

import scrapy

from testScrapy.douban.douban.items import DoubanItem


class Doubantop250Spider(scrapy.Spider):
    name = 'doubantop250'
    allowed_domains = ['movie.douban.com']
    start_urls = ['https://movie.douban.com/top250?start=25&filter=']
    start=25

    def parse(self, response):
        itemList=response.xpath('//ol[@class="grid_view"]/li')

        # DoubanItem 进行实例化
        doubanItem=DoubanItem()

        for item in itemList:
            name=item.xpath('.//img/@alt').get()
            inq=item.xpath('.//span[@class="inq"]/text()').get()
            rat=item.xpath('.//span[@class="rating_num"]/text()').get()

            doubanItem['name']=name
            doubanItem['inq']=inq
            doubanItem['rat']=rat
            yield doubanItem
            print(name,inq,rat)
        # if self.start<90:
        #     self.start+=25
        #     url='https://movie.douban.com/top250?start={}&filter='.format(self.start)
        #     yield scrapy.Request(url=url,callback=self.parse)

        pass

pipelines.py 实现数据存储

class DoubanPipeline:
    def process_item(self, item, spider):
        print("pipelines:",item['name'],item['inq'],item['rat'])
        return item

settings.py 配置文件


BOT_NAME = 'doubantop100'
SPIDER_MODULES = ['doubantop100.spiders']
NEWSPIDER_MODULE = 'doubantop100.spiders'

# 设置robot.txt为False
ROBOTSTXT_OBEY = False

# 请求头信息
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Language': 'en',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}

运行结果:

D:\developworkspace\python\51job\venv\Scripts\python.exe D:/developworkspace/python/51job/testScrapy/douban/douban/spiders/main.py
2022-04-15 23:30:02 [scrapy.utils.log] INFO: Scrapy 2.6.1 started (bot: douban)
2022-04-15 23:30:02 [scrapy.utils.log] INFO: Versions: lxml 4.8.0.0, libxml2 2.9.12, cssselect 1.1.0, parsel 1.6.0, w3lib 1.22.0, Twisted 22.2.0, Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 22.0.0 (OpenSSL 1.1.1n  15 Mar 2022), cryptography 36.0.2, Platform Windows-10-10.0.19044-SP0
2022-04-15 23:30:02 [scrapy.crawler] INFO: Overridden settings:
{'BOT_NAME': 'douban',
 'NEWSPIDER_MODULE': 'douban.spiders',
 'SPIDER_MODULES': ['douban.spiders']}
2022-04-15 23:30:02 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.selectreactor.SelectReactor
2022-04-15 23:30:02 [scrapy.extensions.telnet] INFO: Telnet Password: 4b2a144971542f9c
2022-04-15 23:30:03 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.feedexport.FeedExporter',
 'scrapy.extensions.logstats.LogStats']
2022-04-15 23:30:03 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2022-04-15 23:30:03 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2022-04-15 23:30:03 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2022-04-15 23:30:03 [scrapy.core.engine] INFO: Spider opened
2022-04-15 23:30:04 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2022-04-15 23:30:04 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2022-04-15 23:30:04 [filelock] DEBUG: Attempting to acquire lock 1663034880112 on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Lock 1663034880112 acquired on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Attempting to acquire lock 1663034881408 on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/urls\62bf135d1c2f3d4db4228b9ecaf507a2.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Lock 1663034881408 acquired on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/urls\62bf135d1c2f3d4db4228b9ecaf507a2.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Attempting to release lock 1663034881408 on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/urls\62bf135d1c2f3d4db4228b9ecaf507a2.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Lock 1663034881408 released on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/urls\62bf135d1c2f3d4db4228b9ecaf507a2.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Attempting to release lock 1663034880112 on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2022-04-15 23:30:04 [filelock] DEBUG: Lock 1663034880112 released on D:\developworkspace\python\51job\venv\lib\site-packages\tldextract\.suffix_cache/publicsuffix.org-tlds\de84b5ca2167d4c83e38fb162f2e8738.tldextract.json.lock
2022-04-15 23:30:04 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://movie.douban.com/top250?start=25&filter=> (referer: None)
2022-04-15 23:30:04 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '人人心中都有个龙猫,童年就永远不会消失。', 'name': '龙猫', 'rat': '9.2'}
2022-04-15 23:30:04 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '“不要跟我比惨,我比你更惨”再适合这部电影不过了。', 'name': '末代皇帝', 'rat': '9.3'}
龙猫 人人心中都有个龙猫,童年就永远不会消失。 9.2
末代皇帝 “不要跟我比惨,我比你更惨”再适合这部电影不过了。 9.3
蝙蝠侠:黑暗骑士 无尽的黑暗。 9.2
寻梦环游记 死亡不是真的逝去,遗忘才是永恒的消亡。 9.1
活着 张艺谋最好的电影。 9.3
哈利·波特与魔法石 童话世界的开端。 9.1
指环王3:王者无敌 史诗的终章。 9.3
乱世佳人 Tomorrow is another day. 9.3
2022-04-15 23:30:04 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '无尽的黑暗。', 'name': '蝙蝠侠:黑暗骑士', 'rat': '9.2'}
2022-04-15 23:30:04 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '死亡不是真的逝去,遗忘才是永恒的消亡。', 'name': '寻梦环游记', 'rat': '9.1'}
2022-04-15 23:30:04 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '张艺谋最好的电影。', 'name': '活着', 'rat': '9.3'}
2022-04-15 23:30:04 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '童话世界的开端。', 'name': '哈利·波特与魔法石', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '史诗的终章。', 'name': '指环王3:王者无敌', 'rat': '9.3'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': 'Tomorrow is another day.', 'name': '乱世佳人', 'rat': '9.3'}
素媛 受过伤害的人总是笑得最开心,因为他们不愿意让身边的人承受一样的痛苦。 9.3
飞屋环游记 最后那些最无聊的事情,才是最值得怀念的。  9.1
摔跤吧!爸爸 你不是在为你一个人战斗,你要让千千万万的女性看到女生并不是只能相夫教子。 9.0
何以为家 凝视卑弱生命,用电影改变命运。 9.1
我不是药神 对我们国家而言,这样的电影多一部是一部。 9.0
十二怒汉 1957年的理想主义。  9.4
哈尔的移动城堡 带着心爱的人在天空飞翔。 9.1
少年派的奇幻漂流 瑰丽壮观、无人能及的冒险之旅。 9.1
鬼子来了 对敌人的仁慈,就是对自己残忍。 9.3
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '受过伤害的人总是笑得最开心,因为他们不愿意让身边的人承受一样的痛苦。', 'name': '素媛', 'rat': '9.3'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '最后那些最无聊的事情,才是最值得怀念的。 ', 'name': '飞屋环游记', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '你不是在为你一个人战斗,你要让千千万万的女性看到女生并不是只能相夫教子。', 'name': '摔跤吧!爸爸', 'rat': '9.0'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '凝视卑弱生命,用电影改变命运。', 'name': '何以为家', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '对我们国家而言,这样的电影多一部是一部。', 'name': '我不是药神', 'rat': '9.0'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '1957年的理想主义。 ', 'name': '十二怒汉', 'rat': '9.4'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '带着心爱的人在天空飞翔。', 'name': '哈尔的移动城堡', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '瑰丽壮观、无人能及的冒险之旅。', 'name': '少年派的奇幻漂流', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '对敌人的仁慈,就是对自己残忍。', 'name': '鬼子来了', 'rat': '9.3'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '旷古烁今。', 'name': '大话西游之月光宝盒', 'rat': '9.0'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '骗子大师和执著警探的你追我跑故事。 ', 'name': '猫鼠游戏', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '对天空的追逐,永不停止。 ', 'name': '天空之城', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰。', 'name': '天堂电影院', 'rat': '9.2'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '承前启后的史诗篇章。', 'name': '指环王2:双塔奇兵', 'rat': '9.2'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
大话西游之月光宝盒 旷古烁今。 9.0
猫鼠游戏 骗子大师和执著警探的你追我跑故事。  9.1
天空之城 对天空的追逐,永不停止。  9.1
天堂电影院 那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰。 9.2
指环王2:双塔奇兵 承前启后的史诗篇章。 9.2
闻香识女人 史上最美的探戈。 9.1
钢琴家 音乐能化解仇恨。 9.2
罗马假日 爱情哪怕只有一天。 9.1
{'inq': '史上最美的探戈。', 'name': '闻香识女人', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '音乐能化解仇恨。', 'name': '钢琴家', 'rat': '9.2'}
2022-04-15 23:30:05 [scrapy.core.scraper] DEBUG: Scraped from <200 https://movie.douban.com/top250?start=25&filter=>
{'inq': '爱情哪怕只有一天。', 'name': '罗马假日', 'rat': '9.1'}
2022-04-15 23:30:05 [scrapy.core.engine] INFO: Closing spider (finished)
2022-04-15 23:30:05 [scrapy.extensions.feedexport] INFO: Stored csv feed (25 items) in: douban.csv
2022-04-15 23:30:05 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 393,
 'downloader/request_count': 1,
 'downloader/request_method_count/GET': 1,
 'downloader/response_bytes': 12725,
 'downloader/response_count': 1,
 'downloader/response_status_count/200': 1,
 'elapsed_time_seconds': 0.546681,
 'feedexport/success_count/FileFeedStorage': 1,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2022, 4, 15, 15, 30, 5, 54773),
 'httpcompression/response_bytes': 67523,
 'httpcompression/response_count': 1,
 'item_scraped_count': 25,
 'log_count/DEBUG': 35,
 'log_count/INFO': 11,
 'response_received_count': 1,
 'scheduler/dequeued': 1,
 'scheduler/dequeued/memory': 1,
 'scheduler/enqueued': 1,
 'scheduler/enqueued/memory': 1,
 'start_time': datetime.datetime(2022, 4, 15, 15, 30, 4, 508092)}
2022-04-15 23:30:05 [scrapy.core.engine] INFO: Spider closed (finished)

Process finished with exit code 0

其他

__ init__ .py

在Python工程里,当python检测到一个目录下存在__init__.py文件时,python就会把它当成一个模块(module)

yield

返回 后面的结果,并且停止当前的运行
只能用在方法中,表示返回后面的结果对象,并且会停止当前的方法,如果想要继续运行,
	方法相当于一个迭代器对象,可以通过next(方法)继续运行,也能通过方法.send(参数)给返回的那个变量赋值,然后继续运行

生成器(generator)函数用yield表达式将处理好的x发送给生成器(Generator)的调用者;然后生成器(generator)的调用者可以通过send函数,将外部信息替换生成器内部yield表达式的返回值,并赋值给y,并参与后续的迭代流程。

next()

返回迭代器的下一个项目

在python中方法是一个迭代器对象

D:\developworkspace\python\51job\venv\Scripts\python.exe D:/developworkspace/python/51job/testium/test02.py
<class 'generator'>
string......
4
********************
res None
4

Process finished with exit code 0

posted @ 2022-04-15 23:40  黎白昼  阅读(105)  评论(0)    收藏  举报