python3+Scrapy爬虫入门
创建项目
scrapy startproject douban
红框中是指出创建一个新爬虫。
创建爬虫
cd douban
scrapy genspider girls https://www.douban.com/group/641424/
自此,我们的项目算是基本创建好了,其中“girls”是指爬虫的名称,“https://www.douban.com/group/641424/”爬虫的域名。不过为了方便我们项目启动,可以在项目中新建一个entrypoint.py文件,文件内容如下:
from scrapy.cmdline import executeexecute(['scrapy', 'crawl', 'girls'])
项目架构图
创建Item
创建一个新的Item方便我们保存所爬取的数据。
下面我们就来创建保存数据Item:
# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass DoubanItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()passclass GirlItem(scrapy.Item):title = scrapy.Field() # 标题author = scrapy.Field() # 作者url = scrapy.Field() # urllastTime = scrapy.Field() # 最近回应时间detail_time = scrapy.Field() # 发帖时间detail_report = scrapy.Field() # 发帖内容def __str__(self):return '{"title": "%s", "author": "%s", "url": "%s", "lastTime": "%s", "detail_time": "%s", "detail_report": "%s"}\n' %(self['title'], self['author'], self['url'], self['lastTime'], self['detail_time'], self['detail_report'])
之所以要从写__str__
方法,是因为要将它展示成我们想展示的样子。
上面DoubanItem是由scrapy自动生成出来的,我们暂时先不管它,如果你想直接用系统创建的那个Item也是可以的。我这里是自己新创建一个,看起来比较好管理。
爬取网页
首先修改setting.py,添加USER_AGENT以及修改ROBOTSTXT_OBEY
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
ROBOTSTXT_OBEY = False
字段title author url lastTime
在第一层URL中可以爬取到,而detail_time detail_report
则是要根据url继续下钻爬取。所以在parse
方法中继续下钻调用detail_parse
方法,在detail_parse
方法中将item保存至文件中。
完整代码:
# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
from items import GirlItemclass GirlsSpider(scrapy.Spider):name = 'girls'allowed_domains = ['www.douban.com']start_urls = ['https://www.douban.com/group/641424/discussion?start=25']# 重写start_requests方法# def start_requests(self):# # 浏览器用户代理# headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}# return [scrapy.Request(url=self.start_urls[0], callback=self.parse, headers=headers)]def parse(self, response):html = response.textsoup = BeautifulSoup(html, "lxml")# print("开始打印soup")# print(soup)table = soup.tabletr_arr = table.find_all("tr")for tr in tr_arr:item = GirlItem()tds = tr.find_all('td')item['title'] = tds[0].get_text().replace('\n','').replace(' ', '')item['author'] = tds[1].get_text().replace('\n','').replace(' ', '')item['lastTime'] = tds[3].get_text().replace('\n','')try:item['url'] = tds[0].find('a',href=True)['href']# 根据内页地址爬取yield scrapy.Request(item['url'], meta={'item': item}, callback=self.detail_parse)except:item['url'] = ""#找到下一个链接,也就是翻页next_url = soup.find(name='div', attrs={"class":"paginator"}).find(name='span', attrs={"class":"next"}).find(name='link')['href']if next_url:print("开始下一页")yield scrapy.Request(next_url, callback=self.parse)def detail_parse(self, response):# 接收上级已爬取的数据item = response.meta['item']try:item['detail_time'] = response.xpath('//*[@id="topic-content"]/div[2]/h3/span[2]/text()').extract()[0]except BaseException as e:print(e)item['detail_time'] = ""try:item['detail_report'] = response.xpath('//*[@id="link-report"]').extract()[0].replace('\n','')except BaseException as e:print(e)item['detail_report'] = ""write_to_file('E:/douban-detail.txt', item)# return itemdef write_to_file (file_name, txt):# print("正在存储文件" + str(file_name))# w 如果没有这个文件将创建这个文件''''r':读'w':写'a':追加'r+' == r+w(可读可写,文件若不存在就报错(IOError))'w+' == w+r(可读可写,文件若不存在就创建)'a+' ==a+r(可追加可写,文件若不存在就创建)'''f = open(file_name, 'a', encoding='utf-8')f.write(str(txt))f.close()
运行项目
python entrypoint.py
python3+Scrapy爬虫入门相关推荐
- python3爬虫入门教程-总算懂得python3.4爬虫入门教程
Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python3.4爬虫入门教程 环境配置:下载Pytho ...
- python3 scrapy爬虫_Python3 Scrapy爬虫框架(Scrapy/scrapy-redis)
Python3 Scrapy爬虫框架(Scrapy/scrapy-redis) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog..net/Rozol/article/ ...
- Scrapy爬虫入门教程五 Selectors(选择器)
Scrapy爬虫入门教程一 安装和基本使用 Scrapy爬虫入门教程二 官方提供Demo Scrapy爬虫入门教程三 命令行工具介绍和示例 Scrapy爬虫入门教程四 Spider(爬虫) Scrap ...
- 【学习教程系列】最通俗的 Python3 网络爬虫入门
很多朋友学习Python都是先从爬虫开始,其原因不外两方面: 其一Python对爬虫支持度较好,类库众多,其二语法简单,入门容易,所以两者形影相随,不离不弃. 要使用python语言做爬虫,首先需要学 ...
- python3 scrapy 爬虫实战之爬取站长之家
爬取目标 站长之家:http://top.chinaz.com/all/ 爬取工具 win10 python3 scrapy BeautifulSoup 爬取内容 1 网站缩略图 2 网站名称 3 网 ...
- Python3小白爬虫入门(一)
(图片来源于网络) 首先,作为一个刚入门python的小白,可以跟大家说,使用爬虫其实并不是很难.但是深入学习就另说了. 要使用python爬虫,首先要知道爬虫是什么?能做什么?先来一波百度: 网络爬 ...
- Scrapy爬虫入门系列2 示例教程
本来想爬下http://www.alexa.com/topsites/countries/CN 总排名的,但是收费了 只爬了50条数据: response.xpath('//div[@class=&q ...
- scrapy爬虫入门
我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目 ...
- python3 + Scrapy爬虫学习之创建项目
最近准备做一个关于scrapy框架的实战,爬取腾讯社招信息并存储,这篇博客记录一下创建项目的步骤 pycharm是无法创建一个scrapy项目的 因此,我们需要用命令行的方法新建一个scrapy项目 ...
最新文章
- 大小端以及字节序的问题
- 人工智能和区块链的融合
- 经历过这三个NLP项目的洗礼,成功拿下NLP算法Offer!
- Leetcode 106. 从中序与后序遍历序列构造二叉树 解题思路及C++实现
- 解决thymeleaf报错 $ is not defined
- 承载物联之城 阿里云为无锡建设统一物联网基础平台
- 第四周课程总结&实验报告。
- 8.UNIX 环境高级编程--进程控制
- 淘宝客CMS,公众号,小程序,淘客APP,外卖返利系统
- [杂谈] 9. C语言中getch()函数
- vb科学计算机ppt,科学计算器vb代码.doc
- Springboot 基础6 - Redis实战
- Samsung Pay和Finablr宣布跨境支付合作
- 身份证省市区SQL代码
- 利用计算机技术设计直流稳压电源,基于单片机的直流稳压电源的设计(本科)毕业论文.doc...
- word 此文件来自其它计算机,问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……...
- 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- vue alert内含有html,vue一步步实现alert功能
- 关于孔明先生职称申请报告的回函
- mysql免安装版linux_Linux下配置免安装版的MySQL
热门文章
- SQL重复记录查询(常用)
- 华为鸿蒙公测链接,华为鸿蒙系统2.0启动第二轮公测,新增6款nova机型
- Java Byte取值范围
- Python程序退出方式小结(亲测)
- 程序员面试时这样介绍自己的项目经验,成功率能达到98.99%
- ELK5.3+Kafka集群配置
- PHP的mysqli_fetch_all
- c++ 准确计时_C++精确计时
- 金士顿u盘分区工具_使用U盘工具给电脑硬盘快速分区教程
- java set中元素是数组_将HashSet中的元素转换为Java中的数组