Scrapy 应用之爬取《盗墓笔记》
2024-10-20 03:25:12
爬取《盗墓笔记》和爬取《宦海沉浮》原理一样,但是使用了两种不同的追踪链接的方式,《盗墓笔记》使用的是跟踪下一页链接,直至没有下一页为止,《宦海沉浮》则是将所有的url都放在start_urls中进行爬取
第一步:新建项目
KeysdeMacBook:Desktop keys$ scrapy startproject Novel
New Scrapy project 'Novel', using template directory '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scrapy/templates/project', created in:
/Users/keys/Desktop/Novel
You can start your first spider with:
cd Novel
scrapy genspider example example.com
第二步:创建爬虫
KeysdeMacBook:Desktop keys$ cd Novel/
KeysdeMacBook:MyCrawl keys$ scrapy genspider BiJi www.mossiella.com/html/255.html
第三步:配置item.py
# -*- coding: utf-8 -*- import scrapy class NovelItem(scrapy.Item):
url = scrapy.Field()
title = scrapy.Field()
content = scrapy.Field()
第四步:编写爬虫
# -*- coding: utf-8 -*-
import scrapy
from Novel.items import NovelItem class BijiSpider(scrapy.Spider):
name = 'BiJi'
allowed_domains = ['www.mossiella.com']
start_urls = ['http://www.mossiella.com/html/255.html/'] def parse(self, response):
url = response.url
title = response.xpath('//h1/text()').extract_first('')
content = ','.join(response.xpath('//div[@class="zwcent"]/p/text()').extract())
myitem = NovelItem()
myitem['url'] = url
myitem['title'] = title
myitem['content'] = content yield myitem
next_url = response.xpath('//a[@rel="next"]') if next_url:
url = next_url.css('::attr(href)').extract_first('')
yield scrapy.Request(url=url, callback=self.parse)
第五步:配置pipeline.py
import pymysql class MysqlPipeline(object):
# 采用同步的机制写入mysql
def __init__(self):
self.conn = pymysql.connect(
'127.0.0.1',
'root',
'rootkeys',
'Article',
charset="utf8",
use_unicode=True)
self.cursor = self.conn.cursor() def process_item(self, item, spider):
insert_sql = """
insert into BiJi(url, title, content)
VALUES (%s, %s, %s)
"""
# 使用VALUES实现传值
self.cursor.execute(
insert_sql,
(item["url"],
item["title"],
item["content"]))
self.conn.commit()
第六步:配置setting.py
BOT_NAME = 'Novel'
SPIDER_MODULES = ['Novel.spiders']
NEWSPIDER_MODULE = 'Novel.spiders'
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
ROBOTSTXT_OBEY = False
第七步:运行爬虫
import os
import sys
from scrapy.cmdline import execute sys.path.append(os.path.dirname(os.path.abspath(__file__))) run_spider = 'BiJi' if __name__ == '__main__':
print('Running Spider of ' + run_spider)
execute(['scrapy', 'crawl', run_spider])
最新文章
- 实体框架高级应用之动态过滤 EntityFramework DynamicFilters
- 利用HttpURLConnection发送请求
- Qt4.8.5 QtWebKit QWebView 用户栈检查崩溃问题的思考
- 磨刀不误砍柴工,使用visual studio之前应该先了解这些...
- Spring 注解实体类中非数据库字段属性
- c的基础 1. 无符号数和补码
- form 转json最佳示例
- HDU 3743 Frosh Week(归并排序求逆序数)
- div的优缺点
- 学习React系列(四)——受控组件与非受控组件
- APP内置react 应用与APP的交互问题
- Maximum Width Ramp LT962
- android默认开启adb调试方法分析
- 福州大学软件工程1816 | W班 第8次作业[团队作业,随堂小测——校友录]
- day5.python列表练习题
- Matlab:导数边界值的有限元(Ritz)法
- 【测试记录】EF插入查询性能
- 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法
- Mac 配置教程-日常篇
- POJ2531&;&;1416&;&;2676&;&;1129
热门文章
- Spring之WebContext不使用web.xml启动 初始化重要的类源码分析(Servlet3.0以上的)
- 【踩坑】Safari不兼容webpack封装的vue项目
- storm trident的filter和函数
- main函数与命令行参数
- VC和MATLAB混合开发需要注意的一个问题
- 初习mysql procedure
- Educational Codeforces Round 12补题 经典题 再次爆零
- MIPS程序设计实例
- Windows server 2012安装oracle11g(32/64位)步骤
- 制作新的train,test数据集