prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Change the scrapy short description
  The Scrapy short description says:
  
  > Scrapy, a fast high-level screen scraping and web crawling framework.
  
  I think would be better:
  
  > Scrapy, a fast high-level web crawling and screen scraping framework.
  
  Because it highlights first its difference with simple screen scraping tools (i.e. Nokogiri. Mechanize, etc).
  
  Screen scraping can be done even with curl and grep, but I don't think you could do web crawling with such simple tools.
  
  Perhaps this can be an alternative:
  
  > Scrapy, a fast and scalable web crawling and screen scraping framework.
  
  Also the term "web data mining" can be a good fit for Scrapy (along with Scrapely and similar tools) and help to shape its roadmap.
  
  
  </issue>
  <code>
  [start of setup.py]
  1 from os.path import dirname, join
  2 from setuptools import setup, find_packages
  3 
  4 
  5 with open(join(dirname(__file__), 'scrapy/VERSION'), 'rb') as f:
  6     version = f.read().decode('ascii').strip()
  7 
  8 
  9 setup(
  10     name='Scrapy',
  11     version=version,
  12     url='http://scrapy.org',
  13     description='A high-level Web Crawling and Screen Scraping framework',
  14     long_description=open('README.rst').read(),
  15     author='Scrapy developers',
  16     maintainer='Pablo Hoffman',
  17     maintainer_email='pablo@pablohoffman.com',
  18     license='BSD',
  19     packages=find_packages(exclude=('tests', 'tests.*')),
  20     include_package_data=True,
  21     zip_safe=False,
  22     entry_points={
  23         'console_scripts': ['scrapy = scrapy.cmdline:execute']
  24     },
  25     classifiers=[
  26         'Framework :: Scrapy',
  27         'Development Status :: 5 - Production/Stable',
  28         'Environment :: Console',
  29         'Intended Audience :: Developers',
  30         'License :: OSI Approved :: BSD License',
  31         'Operating System :: OS Independent',
  32         'Programming Language :: Python',
  33         'Programming Language :: Python :: 2',
  34         'Programming Language :: Python :: 2.7',
  35         'Topic :: Internet :: WWW/HTTP',
  36         'Topic :: Software Development :: Libraries :: Application Frameworks',
  37         'Topic :: Software Development :: Libraries :: Python Modules',
  38     ],
  39     install_requires=[
  40         'Twisted>=10.0.0',
  41         'w3lib>=1.8.0',
  42         'queuelib',
  43         'lxml',
  44         'pyOpenSSL',
  45         'cssselect>=0.9',
  46         'six>=1.5.2',
  47     ],
  48 )
  49
  [end of setup.py]
  [start of scrapy/__init__.py]
  1 """
  2 Scrapy - a web crawling and screen scraping framework written for Python
  3 """
  4 
  5 __all__ = ['__version__', 'version_info', 'optional_features', 'twisted_version',
  6            'Spider', 'Request', 'FormRequest', 'Selector', 'Item', 'Field']
  7 
  8 # Scrapy version
  9 import pkgutil
  10 __version__ = pkgutil.get_data(__package__, 'VERSION').decode('ascii').strip()
  11 version_info = tuple(int(v) if v.isdigit() else v
  12                      for v in __version__.split('.'))
  13 del pkgutil
  14 
  15 # Check minimum required Python version
  16 import sys
  17 if sys.version_info < (2, 7):
  18     print("Scrapy %s requires Python 2.7" % __version__)
  19     sys.exit(1)
  20 
  21 # Ignore noisy twisted deprecation warnings
  22 import warnings
  23 warnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted')
  24 del warnings
  25 
  26 # Apply monkey patches to fix issues in external libraries
  27 from . import _monkeypatches
  28 del _monkeypatches
  29 
  30 # WARNING: optional_features set is deprecated and will be removed soon. Do not use.
  31 optional_features = set()
  32 # TODO: backwards compatibility, remove for Scrapy 0.20
  33 optional_features.add('ssl')
  34 try:
  35     import boto
  36     del boto
  37 except ImportError:
  38     pass
  39 else:
  40     optional_features.add('boto')
  41 
  42 from twisted import version as _txv
  43 twisted_version = (_txv.major, _txv.minor, _txv.micro)
  44 if twisted_version >= (11, 1, 0):
  45     optional_features.add('http11')
  46 
  47 # Declare top-level shortcuts
  48 from scrapy.spider import Spider
  49 from scrapy.http import Request, FormRequest
  50 from scrapy.selector import Selector
  51 from scrapy.item import Item, Field
  52 
  53 del sys
  54
  [end of scrapy/__init__.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/scrapy/__init__.py b/scrapy/__init__.py
  --- a/scrapy/__init__.py
  +++ b/scrapy/__init__.py
  @@ -1,5 +1,5 @@
   """
  -Scrapy - a web crawling and screen scraping framework written for Python
  +Scrapy - a web crawling and web scraping framework written for Python
   """
   
   __all__ = ['__version__', 'version_info', 'optional_features', 'twisted_version',
  diff --git a/setup.py b/setup.py
  --- a/setup.py
  +++ b/setup.py
  @@ -10,7 +10,7 @@
       name='Scrapy',
       version=version,
       url='http://scrapy.org',
  -    description='A high-level Web Crawling and Screen Scraping framework',
  +    description='A high-level Web Crawling and Web Scraping framework',
       long_description=open('README.rst').read(),
       author='Scrapy developers',
       maintainer='Pablo Hoffman',
  
verification_info: {"golden_diff": "diff --git a/scrapy/__init__.py b/scrapy/__init__.py\n--- a/scrapy/__init__.py\n+++ b/scrapy/__init__.py\n@@ -1,5 +1,5 @@\n \"\"\"\n-Scrapy - a web crawling and screen scraping framework written for Python\n+Scrapy - a web crawling and web scraping framework written for Python\n \"\"\"\n \n __all__ = ['__version__', 'version_info', 'optional_features', 'twisted_version',\ndiff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -10,7 +10,7 @@\n     name='Scrapy',\n     version=version,\n     url='http://scrapy.org',\n-    description='A high-level Web Crawling and Screen Scraping framework',\n+    description='A high-level Web Crawling and Web Scraping framework',\n     long_description=open('README.rst').read(),\n     author='Scrapy developers',\n     maintainer='Pablo Hoffman',\n", "issue": "Change the scrapy short description\nThe Scrapy short description says:\n\n> Scrapy, a fast high-level screen scraping and web crawling framework.\n\nI think would be better:\n\n> Scrapy, a fast high-level web crawling and screen scraping framework.\n\nBecause it highlights first its difference with simple screen scraping tools (i.e. Nokogiri. Mechanize, etc).\n\nScreen scraping can be done even with curl and grep, but I don't think you could do web crawling with such simple tools.\n\nPerhaps this can be an alternative:\n\n> Scrapy, a fast and scalable web crawling and screen scraping framework.\n\nAlso the term \"web data mining\" can be a good fit for Scrapy (along with Scrapely and similar tools) and help to shape its roadmap.\n\n", "before_files": [{"content": "from os.path import dirname, join\nfrom setuptools import setup, find_packages\n\n\nwith open(join(dirname(__file__), 'scrapy/VERSION'), 'rb') as f:\n    version = f.read().decode('ascii').strip()\n\n\nsetup(\n    name='Scrapy',\n    version=version,\n    url='http://scrapy.org',\n    description='A high-level Web Crawling and Screen Scraping framework',\n    long_description=open('README.rst').read(),\n    author='Scrapy developers',\n    maintainer='Pablo Hoffman',\n    maintainer_email='pablo@pablohoffman.com',\n    license='BSD',\n    packages=find_packages(exclude=('tests', 'tests.*')),\n    include_package_data=True,\n    zip_safe=False,\n    entry_points={\n        'console_scripts': ['scrapy = scrapy.cmdline:execute']\n    },\n    classifiers=[\n        'Framework :: Scrapy',\n        'Development Status :: 5 - Production/Stable',\n        'Environment :: Console',\n        'Intended Audience :: Developers',\n        'License :: OSI Approved :: BSD License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 2',\n        'Programming Language :: Python :: 2.7',\n        'Topic :: Internet :: WWW/HTTP',\n        'Topic :: Software Development :: Libraries :: Application Frameworks',\n        'Topic :: Software Development :: Libraries :: Python Modules',\n    ],\n    install_requires=[\n        'Twisted>=10.0.0',\n        'w3lib>=1.8.0',\n        'queuelib',\n        'lxml',\n        'pyOpenSSL',\n        'cssselect>=0.9',\n        'six>=1.5.2',\n    ],\n)\n", "path": "setup.py"}, {"content": "\"\"\"\nScrapy - a web crawling and screen scraping framework written for Python\n\"\"\"\n\n__all__ = ['__version__', 'version_info', 'optional_features', 'twisted_version',\n           'Spider', 'Request', 'FormRequest', 'Selector', 'Item', 'Field']\n\n# Scrapy version\nimport pkgutil\n__version__ = pkgutil.get_data(__package__, 'VERSION').decode('ascii').strip()\nversion_info = tuple(int(v) if v.isdigit() else v\n                     for v in __version__.split('.'))\ndel pkgutil\n\n# Check minimum required Python version\nimport sys\nif sys.version_info < (2, 7):\n    print(\"Scrapy %s requires Python 2.7\" % __version__)\n    sys.exit(1)\n\n# Ignore noisy twisted deprecation warnings\nimport warnings\nwarnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted')\ndel warnings\n\n# Apply monkey patches to fix issues in external libraries\nfrom . import _monkeypatches\ndel _monkeypatches\n\n# WARNING: optional_features set is deprecated and will be removed soon. Do not use.\noptional_features = set()\n# TODO: backwards compatibility, remove for Scrapy 0.20\noptional_features.add('ssl')\ntry:\n    import boto\n    del boto\nexcept ImportError:\n    pass\nelse:\n    optional_features.add('boto')\n\nfrom twisted import version as _txv\ntwisted_version = (_txv.major, _txv.minor, _txv.micro)\nif twisted_version >= (11, 1, 0):\n    optional_features.add('http11')\n\n# Declare top-level shortcuts\nfrom scrapy.spider import Spider\nfrom scrapy.http import Request, FormRequest\nfrom scrapy.selector import Selector\nfrom scrapy.item import Item, Field\n\ndel sys\n", "path": "scrapy/__init__.py"}]}