Python爬虫_案例分析(二)

一、电影天堂案例

import scrapy
from scrapy_movie.items import ScrapyMovieItem
class MvSpider(scrapy.Spider):name = 'mv'allowed_domains = ['www.dytt8.net']start_urls = ['https://www.dytt8.net/html/gndy/china/index.html']def parse(self, response):# 第一页的名字和第二页的图片a_list= response.xpath('//div[@class="co_content8"]//td[2]//a[2]')for a in a_list:# 获取第一页的name和要点击的链接name = a.xpath('./text()').extract_first()href = a.xpath('./@href').extract_first()# 第二页的地址是url = 'https://www.dytt8.net' + href# 对第二页的链接发起访问yield scrapy.Request(url=url,callback=self.parse_second,meta = {'name':name})def parse_second(self,response):# 如果拿不到数据,务必检查xpath的路径是否正确src = response.xpath('//div[@id="Zoom"]//img/@src').extract_first()# 接收到请求的meta参数的值name = response.meta['name']movie = ScrapyMovieItem(src = src,name = name)yield movie

pipelines.py

from itemadapter import ItemAdapter
class ScrapyMoviePipeline:def open_spider(self,spider):self.fp = open('movie.json','w',encoding='utf-8')def process_item(self, item, spider):self.fp.write(str(item))return itemdef close_spider(self,spider):self.fp.close()

二、链接提取器的使用_CrawlSpider

案例:读书网

scrapy shell https://www.dushu.com/book/1188.html
from scrapy.linkextractors import LinkExtractor# allow()   # 正则表达式,提取符合正则的链接link = LinkExtractor(allow = r'/book/1188_\d+\.html')link.extract_links(response)# restrict_xpaths() # xpath提取符合xpath规则的链接link1 = LinkExtractor(restrict_xpaths = r'//div[@class = "pages"]/a')link1.extract_links(response)# restrict_css() # 提取符合选择器规则的链接

1.创建项目 scrapy startproject 【项目名字:scrapy_readbook】
2.跳转到spider文件夹的目录下
cd D:\PythonCode\scrapy_readbook\scrapy_readbook\spiders
3.创建爬虫文件
scrapy genspider -t crawl read https://www.dushu.com/book/1188.html

(一)修改read.py

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_readbook.items import ScrapyReadbookItem
class ReadSpider(CrawlSpider):name = 'read'allowed_domains = ['www.dushu.com']start_urls = ['https://www.dushu.com/book/1188_1.html']rules = (# 正则表达式 + 代表很多个Rule(LinkExtractor(allow=r'/book/1188_\d+\.html'),callback='parse_item',follow=False),)def parse_item(self, response):img_list = response.xpath('//div[@class="bookslist"]//img')for img in img_list : name = img.xpath('./@alt').extract_first()src = img.xpath('./@data-original').extract_first()book = ScrapyReadbookItem(name=name,src=src)yield book

(二)定义变量items.py

import scrapy
class ScrapyReadbookItem(scrapy.Item):name = scrapy.Field()src = scrapy.Field()

(三)开启管道settings.py

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'scrapy_readbook.pipelines.ScrapyReadbookPipeline': 300,
}

(四)自定义方法pipelines.py

from itemadapter import ItemAdapter
class ScrapyReadbookPipeline:def open_spider(self,spider):self.fp = open('book.json','w',encoding='utf-8')def process_item(self, item, spider):self.fp.write(str(item))return itemdef close_spider(self,spider):self.fp.close()

三、读书网数据存入数据库

(一)配置相关信息settings.py

DB_HOST = '127.0.0.1'
# 端口号
DB_PORT = 3306
DB_USER = 'root'
DB_PASSWORD = '123456'
DB_NAME = 'book'
# utf-8没有-
DB_CHARSET = 'utf8'

(二)安装pymysql

pip install pymysql -i https://pypi.douban.com/simple

(三)自定义管道类pipelines.py

from itemadapter import ItemAdapter
class ScrapyReadbookPipeline:def open_spider(self,spider):self.fp = open('book.json','w',encoding='utf-8')def process_item(self, item, spider):self.fp.write(str(item))return itemdef close_spider(self,spider):self.fp.close()# 加载settings文件
from scrapy.utils.project import get_project_settings
import pymysql
class MysqlPipeline:def open_spider(self,spider):settings = get_project_settings()# DB_HOST = '192.168.97.233'# # 端口号# DB_PORT = 3306# DB_USER = 'root'# DB_PASSWORD = '123456'# DB_NAME = 'book'# DB_CHARSET = 'utf-8'self.host = settings['DB_HOST']self.port = settings['DB_PORT']self.user = settings['DB_USER']self.password = settings['DB_PASSWORD']self.name = settings['DB_NAME']self.charset = settings['DB_CHARSET']self.connect()def connect(self):self.conn = pymysql.connect(host = self.host,port = self.port,user = self.user,password = self.password,db = self.name,charset = self.charset)self.cursor = self.conn.cursor()def process_item(self,item,spider):sql = 'insert into book(name,src) values("{}","{}")'.format(item['name'],item['src'])# 执行sql语句self.cursor.execute(sql)# 提交self.conn.commit()return itemdef close_spider(self,spider):self.cursor.close()self.conn.close()


若把read.py中的follow属性值设为True,则爬取所有数据

四、scrapy日志信息和日志等级

在settings.py文件中指定日志级别


将日志信息保存成文件

五、scrapy百度翻译post请求

import scrapyimport json
class TestpostSpider(scrapy.Spider):name = 'testpost'allowed_domains = ['fanyi.baidu.com']# post请求没有参数,则该请求没有意义 故start_urls也没用# start_urls = ['https://fanyi.baidu.com/sug']## def parse(self, response):#     passdef start_requests(self):url = 'https://fanyi.baidu.com/sug'data = {'kw': 'final'}yield scrapy.FormRequest(url=url,formdata=data,callback=self.parse_second)def parse_second(self,response):content = response.textobj = json.loads(content)print(obj)


Scrapy系列完结撒花啦啦~~

Python爬虫_案例分析(二)相关推荐

  1. Python爬虫的案例分析(梨视频下载)

    我们对梨视频的站点进行分析.得出如下结论:视频地址如下,但是在源码中并没有看到,也就得出这个页面是二次渲染.我们通过浏览器,找到返回视频地址的接口 通过比对,返回的视频接口和播放地址,以及视频的初始u ...

  2. 【Class 20】【实例】python 爬虫简单案例实现二---将数据保存为CSV文件

    摘抄一位网友的写入和读取csv的代码: #输出数据写入CSV文件 import csv data = [("Mike", "male", 24),(" ...

  3. Python爬虫实战-----案例分析爬虫一般过程

    有点闲适不知道看什么才好,那可以看看大众的口味.我们可以爬取各类国创,番剧等视频在榜作品,看看那些视频收到大家的喜爱.(虽然没人会用爬虫来看番) 目录 一.

  4. Python爬虫_某宝网案例

    Python爬虫_某宝网案例 一.导入第三方库,确定url,定义headers ,伪装爬虫代码 import requests url = 'https://s.taobao.com/search?q ...

  5. Python爬虫_音乐案例

    Python爬虫_音乐案例 [案例目的]:下载音乐 [第三方库]:1.requests 2.perttytable [开发环境]:1.Python3.8 2.PyCharm 2022.1 # http ...

  6. python登录教务系统_强智科技教务系统python爬虫模拟登录分析(湖南)

    强智科技教务系统python爬虫模拟登录分析(湖南) 本文章仅用作于学习 前提:最近期末到来,想第一时间看到新出成绩的,于是就有了爬取学校教务系统自己的成绩并通过Qmsg酱推送到自己QQ上的想法,目前 ...

  7. 连享会-Python爬虫与文本分析专题 (2019.5.17-19)

    连享会-Python爬虫与文本分析专题研讨班 文章目录 连享会-Python爬虫与文本分析专题研讨班 1. 课程概览 2. 嘉宾简介 3. 授课内容 3.1 课程介绍 为什么要学爬虫和文本分析? 为什 ...

  8. python爬虫_网易音乐歌单

    小白flag7 python爬虫_网易音乐歌单 准备 import os #存放文件处理 import time #程序运行时间计算 import sys #错误信息返回 预留 from seleni ...

  9. Python 爬虫实战:分析豆瓣中最新电影的影评

    Python 爬虫实战:分析豆瓣中最新电影的影评 接触python时间不久,做些小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的 ...

最新文章

  1. MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)...
  2. 推荐五款浏览Github必备的Chrome插件
  3. 项目实施管理之系统演示
  4. Servlet之请求转发和响应重定向
  5. UI设计插画素材|移动设备和网络屏幕
  6. Source code manager common
  7. 地理位置与经纬度之间相互转换(基于python调用百度API)
  8. 学计算机的人会单身吗,大学里最易单身的十大专业
  9. 如何在中国高等教育学生信息网上在线查询自己的学历信息
  10. 西南科技大学 Python程序设计 班长选举
  11. 举例在移动HTML5 UI框架有那些
  12. 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI
  13. 计算机网络战队名称大全,电竞游戏战队名字大全
  14. day09-面向对象综合训练综合练习
  15. python 删除指定后缀文件_python3 遍历删除特定后缀名文件的方法_天津SEO
  16. 如何向网页中嵌入谷歌英文地图
  17. 《涨知识啦24》---JBS or MPS?
  18. Snappy 1.1.7 源码编译以及验证
  19. 经验 | 嵌入式工程师如何写简历?
  20. 计算机电源可以带上飞机吗,科普:多大容量的移动电源可以带上飞机?

热门文章

  1. Socket学习总结系列(一) -- IM Socket
  2. Amoeba for Aladdin
  3. 【北交所周报】继北证50指数后,北交所推出融资融券交易细则;新股慧为智能上市当日收涨22.13%,远航精密上市即破发;...
  4. notepad++ 同时搜索多个关键字
  5. CUDA学习第三天:Kernel+grid+block关系
  6. 什么是 Adobe AIR
  7. ADB读取和备份安卓应用数据(无Root)
  8. dialog 刘海屏、水滴屏、全面屏 全屏显示
  9. 66、气体灭火系统的巡查内容
  10. 书论95 蒋骥《续书法论》