安装scrapy参考链接
https://blog.youkuaiyun.com/qq_42543250/article/details/81347368
1.创建项目scrapy startproject XXX(项目名字)
2.创建爬虫 scrapy genspider 爬虫名字 网站域名
- 注意
1)爬虫的名字不要和项目名字一样
2)网站域名是允许爬虫采集的域名
3.分析网站
*提取数据
-正则表达式
-XPath-->从HTML中提取数据的语法
-CSS-->从HTML中提取数据的语法
-response.xpath(xpath语法).get()
-get()是得到一个元素
-getall()是得到多个元素
4.运行爬虫
*scrapy crawl 爬虫名字
scrapy.Request(next_url,callback=self.parser)#生成器
Request()发出请求 类似requests.get()
callback 是将发出去的请求得到的响应交还给自己处理
注意:回调函数不要写()只写函数名字
*执行爬虫并保存数据
scrapy crawl 爬虫名字 -o ip.json
scrapy crawl 爬虫名字 -o ip.csv
5.示例代码
# -*- coding: utf-8 -*-
import scrapy
#创建爬虫类 并且继承自scrpay.Spider--->最基础的类 另外几个类都是继承自这个
class XicidailiSpider(scrapy.Spider):
name = 'xicidaili'#爬虫名字-->必须唯一
allowed_domains = ['xicidaili.com']#允许采集的域名
start_urls = ['https://www.xicidaili.com/wn/']#开始采集的网站
#解析响应文件 提取数据 或者网址等response 就是网友源码
def parse(self, response):
#提取数据
#提取IP PORT
selectors=response.xpath('//tr')#选择所有的tr标签
#循环遍历tr标签下的td标签
for selector in selectors:
ip=selector.xpath('./td[2]/text()').get()#.在当前节点下继续选择
port=selector.xpath('./td[3]/text()').get()
#print(ip,port)
items={
'ip':ip,
'port':port
}
yield items
#翻页操作
next_page = response.xpath('//a[@class="next_page"]/@href').get()
if next_page:
print(next_page)
#拼接网址
#next_url='https://www.xicidaili.com'+next_page
next_url=response.urljoin(next_page)
#发出请求 Request callback 是回调函数 就是将请求得到的响应交给自己处理
#相当于递归
yield scrapy.Request(next_url,callback=self.parse)#生成器