爬虫项目案例讲解 案例二:定位、爬虫、定位页面元素、分别定位、简单处理抓取数据(有总结)

1.scrapy shell [要爬取的网址]
他可以很直观的反馈给你要定位的元素是否可以定位到
2.打开后然后再把:
response.xpath("//*[@id=\"ml_001\"]/table/tbody/tr[1]/td[1]/a/text()").extract();语句写入,看如果可以返回值说明可以定位到
yield 作用:和return类似

总体过程如下:
1.cd part6(转到某个project下)
scrapy startproject [名字1]
cd [名字1]
scrapy genspider stock(所爬取的名字) [地址]
2.有了stock.py文件后,首先打开网页,对需要的数据进行获取,点击cope xpath
获取到xpath路径后,在控制台用语句:scrapy shell [要爬取的网址]进入scrapy模式下,接着使用response.xpath("//*[@id=\"ml_001\"]/table/tbody/tr[1]/td[1]/a/text()").extract();类似语句试着查找数据,查找到数据后,就可以在stock.py文件下编写代码了,代码如下:
--------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import scrapy
from urllib import parse
import re
from stock_spider.items import StockItem

class StockSpider(scrapy.Spider):
name = ‘stock‘
allowed_domains = [‘pycs.greedyai.com/‘]
start_urls = [‘http://pycs.greedyai.com/‘]

def parse(self, response):
post_urls=response.xpath("//a/@href").extract();
for post_url in post_urls:
yield scrapy.Request(url=parse.urljoin(response.url, post_url), callback=self.parse_detail, dont_filter=True)

def parse_detail(self,response):
stock_item=StockItem();
# 董事会成员姓名
stock_item["names"]=self.get_tc(response);
# 抓取性别信息
stock_item["sexes"]=self.get_sex(response);
# 抓取年龄信息
stock_item["ages"]=self.get_age(response);
# 股票代码
stock_item["codes"]=self.get_code(response);
# 职位信息
stock_item["leaders"]=self.get_leader(response,len(stock_item["names"]));
#文件存储逻辑
yield stock_item;

def get_tc(self,response):
tc_names=response.xpath("//*[@id=\"ml_001\"]/table/tbody/tr[1]/td[1]/a/text()").extract();
return tc_names;

def get_sex(self,response):
# //*[@id=\"ml_001\"]/table/tbody/tr[2]/td[1]/div/table/thead/tr[2]/td[1]
infos=response.xpath("//*[@class=\"intro\"]/text()").extract();
sex_list=[];
for info in infos:
try:
sex=re.findall("[男|女]",info)[0];
sex_list.append(sex);
except(IndexError):
continue;
return sex_list;

def get_age(self,response):
infos = response.xpath("//*[@class=\"intro\"]/text()").extract();
age_list = [];
for info in infos:
try:
age = re.findall("\d+", info)[0];
age_list.append(age);
except(IndexError):
continue;
return age_list;

def get_code(self,response):
infos=response.xpath(‘/html/body/div[3]/div[1]/div[2]/div[1]/h1/a/@title‘).extract();
code_list=[];
for info in infos:
try:
code=re.findall("\d+",info)[0];
code_list.append(code);
except():
continue;
return code_list;

def get_leader(self,response,length):
tc_leaders=response.xpath("//*[@class=\"tl\"]/text()").extract();
tc_leaders=tc_leaders[0:length];
return tc_leaders;
--------------------------------------------------------------------------------
3.写好后,调用要从main.py中进行调用,代码如下:
--------------------------------------------------------------------------------
from scrapy.cmdline import execute
import sys
import os
#调试的一个写法
sys.path.append(os.path.dirname(os.path.abspath(__file__)));
# exec("scrapy","crawl","tonghuashun");
# execute(["scrapy","crawl","tonghuashun"]);
# execute(["scrapy","crawl","tonghuashun"]);
execute(["scrapy","crawl","stock"]);
#前两个参数是固定的,最后一个参数是自己创建的名字

--------------------------------------------------------------------------------
4.main写好后,接着再items.py中写入如下代码,目的是为了整合items和stock.py。items.py指明了要爬取哪些数据
--------------------------------------------------------------------------------
import scrapy
class StockSpiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
pass
class StockItem(scrapy.Item):
names=scrapy.Field();
sexes=scrapy.Field();
ages=scrapy.Field();
codes=scrapy.Field();
leaders=scrapy.Field();
注意:名称和stock中的保持一致
--------------------------------------------------------------------------------
5.接着再pipeplines.py中编写方法,其中pipeplines.py的主要作用是表明了处理数据的类
--------------------------------------------------------------------------------
class StockSpiderPipeline(object):
def process_item(self, item, spider):
return item
class StockPipeline(object):
def process_item(self, item, spider):
print(item)
return item
--------------------------------------------------------------------------------
6.最后,需要在setting.py中把ITEM_PIPELINES打开,然后加入自己编写的类,代码如下:
--------------------------------------------------------------------------------
ITEM_PIPELINES = {
‘stock_spider.pipelines.StockSpiderPipeline‘: 300,
‘stock_spider.pipelines.StockPipeline‘: 1,
}
--------------------------------------------------------------------------------

总结:在代码编写过程遇到了一些问题,比如说:
1.这段代码要加上异常处理语句

2.要在stock.py文件下引入items.py文件下的类,然后把所有封装的信息全都置在这个类里面

3.每个类里面都要引入response

4.这个title是在网页抓取的时候就有的

5.一般情况下是/text()

6.返回情况,最后用yield将stock_item进行返回

原文地址:https://www.cnblogs.com/jxxgg/p/11666844.html

时间: 2024-10-11 20:10:34

爬虫项目案例讲解 案例二:定位、爬虫、定位页面元素、分别定位、简单处理抓取数据(有总结)的相关文章

分布式爬虫:使用Scrapy抓取数据

分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自

利用“爬虫”抓视频 法院审结全国首例计算机抓取数据案

近期,海淀法院审结了一起利用"爬虫"技术侵入计算机信息系统抓取数据的刑事案件.该案是全国首例利用"爬虫"技术非法入侵其他公司服务器抓取数据,进而实施复制被害单位视频资源的案件. 法院经审理查明,被告单位上海某网络科技有限公司,经营计算机网络科技领域内的技术开发.技术服务.电子商务.电子产品等业务.被告人张某是上海某网络科技有限公司法定代表人兼CEO,负责公司整体运行:被告人宋某于2016年8月至2017年2月任职上海某网络科技有限公司,担任联席CEO,是产品负责人:

sellenium页面元素的定位方法

1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:WebElement username=driver.findElement(By.id("username")); WebElement password=driver.findElement(By.id("password"));  WebElement subimit=

jQuery实现页面元素智能定位

原文:jQuery实现页面元素智能定位 源代码下载地址:http://www.zuidaima.com/share/1550463635950592.htm

nodejs爬虫抓取数据 -- html 实体编码处理办法

cheerio DOM化并解析的时候 1.假如使用了 .text()方法,则一般不会有html实体编码的问题出现 2.如果使用了 .html()方法,则很多情况下都会出现,这时,可能就需要转义一番了 类似这些 因为需要作数据存储,所有需要转换 Халк крушит. Новый способ исполнен 大多数都是&#(x)?\w+的格式 所以就用正则转换一番 var body = ....//这里就是请求后获得的返回数据,或者那些 .html()后获取的 //一般可以先转换为标准uni

Nodejs实现爬虫抓取数据

开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度安装教程...... 1.在项目文件夹安装两个必须的依赖包 npm install superagent --save-dev superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下 npm install cheerio --save-dev cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速.灵活.实施的jQu

利用全局索引定位难缠的页面元素

前言 超级链接是网站中使用非常频繁的HTML元素,可以说超级链接是浏览者和服务器的交互的主要手段. 我们知道有点击链接时,大部分情况下都需要使用txt属性,因为链接没有其他属性可以用来匹配,但不是所有的超链接都支持txt属性特征串的,如果不支持,我们就只能通过索引+标签来定位唯一元素特征字符串了. 前言 咱们来举个栗子,比如我们想点击淘宝淘金币网址上的登陆查看金币明细这个页面元素,正常手动点击的话是会弹出账号登陆窗口的. 咱们启用网页分析工具按F9分析一下,发现这个肉眼看上去貌似是按钮的东西TA

爬虫项目案例讲解 案例二:数据处理

目的:前面的的数据已经传过来了,此时都封装在pipelines.py的 items 里面了. 此时需要对数据进行处理,怎么处理呢?首先,class StockPipeline(object): def __init__(self): self.file=open("executive_prep.csv","a+");#a+:拿到文件的读写权限,没有的话直接写,有的话追加写 def process_item(self, item, spider): # 类加载时要创建

Python3 爬虫实例(一)-- 简单网页抓取

爬虫之前 在着手写爬虫之前,要先把其需要的知识线路理清楚. 第一:了解相关Http协议知识 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 2616.RFC 2616定