python的scrapy爬取网站用法

  1. 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
  2. 明确目标 (编写items.py):明确你想要抓取的目标
  3. 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
  4. 存储内容 (pipelines.py):设计管道存储爬取内容

1.

进入自定义的项目目录中,运行下列命令:

scrapy startproject mySpider

2.

打开 mySpider 目录下的 items.py,创建一个 ItcastItem 类,和构建 item 模型(model)

import scrapy

class ItcastItem(scrapy.Item):
   name = scrapy.Field()
   title = scrapy.Field()
   info = scrapy.Field()

3.

mySpider/spider目录下创建一个名为itcast的爬虫,并指定爬取域的范围,在当前目录下输入:

scrapy genspider itcast "itcast.cn"

打开mySpider/spider目录里的 itcast.py

import scrapy

class ItcastSpider(scrapy.Spider):
    name = "itcast"
    allowed_domains = ["你要的网站,上下两个要同域名"]
    start_urls = (
        '你要的网站',
    )

    def parse(self, response):
        filename = "teacher.html"
        open(filename, 'w').write(response.body)  
#如获取到空白的网站源代码,w换成wr或者wb都行
        pass

运行一下,在mySpider目录下执行:

scrapy crawl itcast

修改 itcast.py 文件代码如下:

import scrapy
class Opp2Spider(scrapy.Spider):
    name = 'itcast'
    allowed_domains = ['itcast.com']
    start_urls = ['http://www.itcast.cn/']

    def parse(self, response):
        # 获取网站标题
        context = response.xpath('/html/head/title/text()')   
       
        # 提取网站标题
        title = context.extract_first()  
        print(title) 
        pass

执行以下命令:

scrapy crawl itcast

修改itcast:

from mySpider.items import ItcastItem

def parse(self, response):
    #open("teacher.html","wb").write(response.body).close()

    # 存放老师信息的集合
    items = []

    for each in response.xpath("//div[@class='li_txt']"):
        # 将我们得到的数据封装到一个 `ItcastItem` 对象
        item = ItcastItem()
        #extract()方法返回的都是unicode字符串
        name = each.xpath("h3/text()").extract()
        title = each.xpath("h4/text()").extract()
        info = each.xpath("p/text()").extract()

        #xpath返回的是包含一个元素的列表
        item['name'] = name[0]
        item['title'] = title[0]
        item['info'] = info[0]

        items.append(item)

    # 直接返回最后数据
    return items

管道处理:

import json

class ItcastJsonPipeline(object):

    def __init__(self):
        self.file = open('teacher.json', 'wb')

    def process_item(self, item, spider):
        content = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file.write(content)
        return item

    def close_spider(self, spider):
        self.file.close()
        

保存数据

scrapy crawl itcast -o teachers.csv

BUG:引用mySpider/items.py 定义的 ItcastItem 类出现问题

 

 解决办法:

import sys 
import os
sys.path.append(os.getcwd())
#用于返回当前工作目录

原因:

pycharm给当前文件的解释位置是在open所在的文件。
而vscode则在打开的文件夹的根目录。

 补充:也可以设置启动器

# coding=utf-8
from scrapy import cmdline

project_name = 'IPS'

# run project
def run_project():
    cmdline.execute(['scrapy','crawl',f'{project_name}'])

# run project and save data
def save_data():
    cmdline.execute(['scrapy','crawl',f'{project_name}','-o',f'{project_name}.csv'])

if __name__ == '__main__':
    save_data()

AttributeError: ‘str’ object has no attribute ‘decode
一般是因为str的类型本身不是bytes,所以不能解码 。

encode: 把普通字符串 转为 机器可识别的bytes

decode: 把bytes转为字符串

Python3的string(字符串) 默认不是bytes,所以不能直接decode,只能先encode转为bytes,再decode。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Scrapy 爬取南京天气预报的示例: 1. 创建 Scrapy 项目 在命令行中输入以下命令: ``` scrapy startproject nanjing_weather cd nanjing_weather ``` 2. 创建爬虫 在命令行中输入以下命令: ``` scrapy genspider nanjing www.weather.com.cn ``` 这将在 `nanjing_weather/spiders` 目录下创建一个名为 `nanjing.py` 的文件,用于定义爬虫。 3. 编写爬虫代码 打开 `nanjing.py` 文件,将以下代码粘贴到文件中: ```python import scrapy class NanjingWeatherSpider(scrapy.Spider): name = 'nanjing' allowed_domains = ['www.weather.com.cn'] start_urls = ['http://www.weather.com.cn/weather/101190101.shtml'] def parse(self, response): # 获取天气信息 weather_info = response.xpath('//div[@id="7d"]/ul/li') for info in weather_info: date = info.xpath('h1/text()').get() weather = info.xpath('p[@class="wea"]/text()').get() temperature = info.xpath('p[@class="tem"]/span/text()').get() + info.xpath('p[@class="tem"]/i/text()').get() wind = info.xpath('p[@class="win"]/i/text()').get() yield { 'city': '南京', 'date': date, 'weather': weather, 'temperature': temperature, 'wind': wind, } ``` 以上代码定义了一个名为 `NanjingWeatherSpider` 的爬虫,首先在 `start_urls` 中定义了南京天气预报页面的链接,然后在 `parse` 方法中获取天气信息,并将数据以字典的形式返回。 4. 运行爬虫 在命令行中输入以下命令: ``` scrapy crawl nanjing -o nanjing_weather.json ``` 这将运行爬虫并将爬取到的数据保存到 `nanjing_weather.json` 文件中。 以上就是一个简单的 Scrapy 爬取南京天气预报的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值