Scrapy爬取世界五百强榜单数据 + Mysql存储(小白入门)

先放一张Scrapy的架构图:(开篇一张图,后面全靠编)
在这里插入图片描述
准备工作:安装了python3.7 pycharm编辑环境、Mysql数据库及scrapy相关库,熟悉xpath的用法,掌握Mysql数据库相关知识。

  1. 创建scrapy项目和spider类
    打开cmd,敲scrapy startproject world500最后面world500是项目的名称,可随意替换。接着cd world500进去刚刚创建的文件夹里面,敲scrapy genspider demo fortunechina.com后面的域名是用来限制爬取的网页,以防止抓取到别的页面。
  2. 分析财富网数据组成点击这里在这里插入图片描述
    可以发现榜单数据都在id="table1"的table下,每一个tr对应一行数据,不同的td则对应相应的数据。再往下翻,发现每一页只显示了50条数据:
    在这里插入图片描述
    但是我们右击鼠标点击查看源代码,发现这500条数据就在源代码里面,根本不需要翻页操作,只是前端的工程师利用js技术实现了分页。
    在这里插入图片描述
  3. 利用Xpath解析数据
    解析数据获得每一家公司的排名、名称、收入、利润、所在国家。
    首先获得每一行的tr,然后在逐步从中获取详细数据。
    利用Chrome Xpath helper检查xpath是否正确,发现一共得到了50条结果,我们的一页就只用50家公司,说明写对了>< 。
    在这里插入图片描述
    在创建的demo.py文件里的parse函数中,加入以下代码:
items = response.xpath('//table[@id="table1"]/tbody/tr')
        for item in items:
            rank = int(item.xpath('./td//text()')[0].extract())
            name = item.xpath('./td//text()')[2].extract().strip()
            income = item.xpath('./td//text()')[3].extract()
            profit = item.xpath('./td//text()')[4].extract()
            country = item.xpath('./td//text()')[5].extract()
  1. 在items.py 里面生成Item对象,并且完善parse函数
import scrapy
class World500Item(scrapy.Item):
    rank = scrapy.Field()
    name = scrapy.Field()
    income = scrapy.Field()
    profit = scrapy.Field()
    country = scrapy.Field()
    pass

然后在demo.py文件parse函数中加上:yield World500Item(rank=rank, name=name, income=income, profit=profit, country=country),这样,就可以将获取的数据交给别的部分处理,以便存入数据库。

  1. 写pipeline函数来存储数据
    这里先连接数据库,import pymysql 通过第三方库来执行mysql语句,初始化的时候先创建表格,如果之前有表格了,那么就删掉重新创建,然后每取得一条信息就插入数据库,open_spider与数据库取得连接,close_spider断开与数据库的连接。注意:rank是mysql的保留字需要加上引号 ` ,esc键下面的那个符号。
import pymysql
class World500Pipeline(object):
    def __init__(self):
        self.db = pymysql.connect(host='localhost', port=3306, user='root', password='raymond', database='spiders',
                                  charset='utf8')
        self.cursor = self.db.cursor()
        self.cursor.execute('DROP TABLE IF EXISTS world500')
        self.cursor.execute(
            'CREATE TABLE world500(`rank` int PRIMARY KEY ,name VARCHAR(80),`income(million dollar)` VARCHAR(20),`profit(million dollar)` VARCHAR(20),country VARCHAR(20))')


    def process_item(self, item, spider):
        sql = 'INSERT INTO world500 VALUES(%s,%s,%s,%s,%s)'
        try:
            self.cursor.execute(sql, (item['rank'], item['name'], item['income'], item['profit'], item['country']))
            self.db.commit()
            print('{}下载完成'.format(item['name']))
        except:
            print('{}下载失败'.format(item['name']))
            self.db.rollback()
        return item

    def close_spider(self):
        self.cursor.close()
        self.db.close()

6.修改settings.py文件

  • 修改ROBOTSTXT_OBEY = False,这样就可以爬取那些robots协议禁止的地方的数据。

  • 修改headers,来达到反爬的目的

DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',
    'Referer': 'https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%96%E7%95%8C%E4%BA%94%E7%99%BE%E5%BC%BA',
    'Host': 'www.fortunechina.com'
}
  • 修改pipeline,这样程序就会执行pipeline函数来存储数据,300代表运行的优先级,我们这里只有一个函数,不需要修改。
ITEM_PIPELINES = {
    'world500.pipelines.World500Pipeline': 300,
}
  1. 运行爬虫
    打开cmd,敲scrapy crawl demo,这样我们的爬虫程序就完成了。

运行结果:
在这里插入图片描述
在这里插入图片描述

Scrapy是一个大的 Python 爬虫框架,可以用来爬取网站上的数据。通过使用Scrapy,我们可以轻松地爬取唐诗三百首的文本内容,并对这些文本进行分析和处理。 唐诗三百首是中国古代文学的经典之作,包括了许多著名的诗人和他们的优秀作品。通过使用Scrapy爬取唐诗三百首,我们可以将这些珍贵的文学作品保存下来,并进行各种分析和展示。 通过对唐诗三百首的爬取和分析,我们可以发现其中蕴含着丰富的文化内涵和艺术价值。这些诗歌所表达的情感和思想,对于我们了解古代中国的文学和历史具有重要意义。通过对这些诗歌进行深入的研究和分析,我们可以更好地理解古代中国人的生活和思想,并将这种理解传播给更多的人。 同时,通过对唐诗三百首的爬取和分析,我们也可以发现其中的一些规律和特点,比如诗歌的格律、意象和主题等方面。通过对这些规律进行总结和分析,我们可以更好地了解唐诗的创作特点和发展趋势,为我们更深入地研究和欣赏古代诗歌提供重要的参考。 总之,通过使用Scrapy爬取唐诗三百首,我们可以将这些珍贵的文学作品保存下来,并进行各种深入的分析和研究,从而更好地了解和传承中国古代文学的精髓。 Scrapy 爬取唐诗三百首不仅可以提供丰富的文学资源,也可以为文学研究和教育工作带来很大的便利和帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值