一.创建项目
创建好的项目
二.创建爬虫
1.创建
一定要先进入刚才创建的爬虫项目文件中再创建爬虫
对比未创建爬虫,发现多了一个xici.py文件
2.查看网站君子协议(robots):
3.解释爬虫文件
三.分析网站
1.提取数据的方法
可以参考我以前的博客
(1)正则表达式
(2)Xpath:从html中提取数据的语法
(3)CSS:从html中提取数据语法
(4)BeautifulSoup
2.用xpath提取ip和端口号
selectors = response.xpath('//tr') # 先选择所有的tr标签
for selector in selectors:
# 第一种获取方法get()
ip = selector.xpath('./td[2]/text()').get() # get表示获取一个元素,getall表示获取所有元素
port = selector.xpath('./td[3]/text()').get()
# 第二种获取方法extract()
ip = selector.xpath('./td[2]/text()').extract_first() # extract_first表示获取第一个元素,extract表示获取所有元素
port = selector.xpath('./td[3]/text()').extract_first()
3.设置请求头
4.运行爬虫
import scrapy # 导入scrapy
# 创建爬虫类,并且继承自scrapy.Spider类(最基础的类,另外几个类都继承自这个)
class XiciSpider(scrapy.Spider):
name = 'xici' # 爬虫名字 必须唯一
allowed_domains = ['xicidaili.com'] # 允许采集的域名
start_urls = ['https://www.xicidaili.com/nn/5'] # 开始采集的网站
# 解析响应数据,提取数据或网址等 response就是网页源码
def parse(self, response):
"""提取数据"""
# 提取IP
selectors = response.xpath('//tr') # 先选择所有的tr标签
for selector in selectors:
ip = selector.xpath('./td[2]/text()').get() # get表示获取一个元素,getall表示获取所有元素
port = selector.xpath('./td[3]/text()').get()
# ip = selector.xpath('./td[2]/text()').extract_first() # extract_first表示获取第一个元素,extract表示获取所有元素
# port = selector.xpath('./td[3]/text()').extract_first()
print(ip, port)
5.翻页操作(上述只可提取一页)
# 翻页处理(找到“下一页”的源代码)
next_page = response.xpath('//a[@class="next_page"]/@href').get()
if next_page:
# 拼接网址
next_url = 'https://www.xicidaili.com' + next_page
# 发出请求Request ,callback表示回调函数,将请求得到的响应交给自己处理
yield scrapy.Request(next_url, callback=self.parse) # 生成器
6.保存在文件中(此时运行保存有风险,可能会被封ip,可以尝试用代理爬取,目前我还没学完,请多多包涵)
可以将文件保存在json格式、html格式、csv格式等的文件中
scrapy crawl xici -o ip.json