Python_Scrapy玩爬虫

  1. 概念:Scrapy是一个快速、高层次的屏幕抓取和web抓取包

  2. Scrapy的安装

     pip3 install scrapy
    
  3. scrapy简单实用-爬虫
    3.1 创建一个测试的Scrapy项目:

	scrapy startproject project_name 

在这里插入图片描述
在这里插入图片描述
3.2 在items.py文件中设置要抓取的字段定义

import scrapy
class DemoItem(scrapy.Item):
  #define the fields for you item here like:
  #name = scrapy.Field()
  title = scrapy.Field() #抓取的标题
  link = scrapy.Field() #抓取的链接

3.3 先获取页面的内容看一看 在spiders文件夹内创建MydemoSpider.py

import scrapy

class MydemoSpider(scrapy.Spider):
    # name表示爬虫的名字,在`scrapy crawl xx`时使用
    name = “mydemo"
    # allowed_domains定义了爬取的范围,限定在某几个域名内
    allowed_domains = ['http://www.n360.cn']
    # start_urls定义了从哪里开始爬取
    start_urls = ['http://www.n360.cn']

    # parse方法用于接收Downloader返回的结果
    def parse(self,response):
        with open('homepage','wb') as f:
            f.write(response.body)

3.4 简单测试: 会在当前目录生成一个homepage,内容为页面的html代码

cd /Users/xietong/Desktop/mydemo/mydemo
scrapy crawl mydemo 

在这里插入图片描述
3.5 了解scrapy的xpath语法

语法 含义
/html/head/title 选择HTML文档中标签内的元素
/html/head/title/text() 选择上面提到的title元素的文本
//td 选择所有的 元素
//div[@class=‘mine’] 选择所有具有class='mine’属性的div元素

3.6 测试scrapy的xpath语法

# 终端输入,进入scrapy shell模式
$scrapy shell "http://www.n360.cn"
# response 可以用它查看网页信息
# response.headers 获取网页的请求头

在这里插入图片描述

# response.xpath('//title’)  获取页面title 返回的是Selector对象

在这里插入图片描述

# response.xpath('//title').extract() extract()方法会将Selector对象转化为列表对象

在这里插入图片描述

# response.xpath('//title/text()').extract() title标签的文本内容

在这里插入图片描述

# response.xpath("//ul[@class='newslist']").extract() 获取ul元素class属性为newslist

在这里插入图片描述

# 获取li标签
sites = response.xpath('//ul[@class="newslist"]/li’)
for site in sites:
	# 获取a标签的text内容
	title = site.xpath('a/text()').extract()
	print(title)

在这里插入图片描述
3.7 直接修改MydemoSpider.py文件内容

import scrapy
from mydemo.items import DemoItem 

class MydemoSpider(scrapy.Spider):
    # name表示爬虫的名字,在`scrapy crawl xx`时使用
    name = "mydemo"
    # allowed_domains定义了爬取的范围,限定在某几个域名内
    allowed_domains = ['http://www.n360.cn']
    # start_urls定义了从哪里开始爬取
    start_urls = ['http://www.n360.cn']

    # parse方法用于接受Downloader返回的结果
    def parse(self,response):
        sites = response.xpath("//ul[@class='newslist']/li")
        items = []
        for site in sites:
            item = DemoItem()
            item['title'] = site.xpath('a/text()').extract()[0]
            item['link'] = self.allowed_domains[0] + site.xpath('a/@href').extract()[0]
            items.append(item)
        return items

3.8 项目完整测试 结果生成json文件 并指定编码

# 将parse函数返回的结果进行导出,使用json格式
scrapy crawl demo -o items.json -t json -s FEED_EXPORT_ENCODING=UTF-8

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/q18729096963/article/details/106080362
今日推荐